SHARE
TWEET

Untitled

a guest Jul 4th, 2015 189 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Sid Meier's Civilization 4
  2. # Copyright Firaxis Games 2006
  3. #
  4. # CvEventManager
  5. # This class is passed an argsList from CvAppInterface.onEvent
  6. # The argsList can contain anything from mouse location to key info
  7. # The EVENTLIST that are being notified can be found
  8.  
  9. from CvPythonExtensions import *
  10. import CvUtil
  11. import CvScreensInterface
  12. import CvDebugTools
  13. #import CvWBPopups
  14. import PyHelpers
  15. import Popup as PyPopup
  16. import CvCameraControls
  17. import CvTopCivs
  18. import sys
  19. #import CvWorldBuilderScreen
  20. import CvAdvisorUtils
  21. import CvTechChooser
  22.  
  23. import CvIntroMovieScreen
  24. import CustomFunctions
  25. import ScenarioFunctions
  26.  
  27. #FfH: Card Game: begin
  28. import CvSomniumInterface
  29. import CvCorporationScreen
  30. #FfH: Card Game: end
  31.  
  32. #FfH: Added by Kael 10/15/2008 for OOS Logging
  33. import OOSLogger
  34. #FfH: End Add
  35.  
  36. ## Ultrapack ##
  37. import WBCityEditScreen
  38. import WBUnitScreen
  39. import WBPlayerScreen
  40. import WBGameDataScreen
  41. import WBPlotScreen
  42. import CvPlatyBuilderScreen
  43. ## Ultrapack ##
  44.  
  45. import Blizzards                #Added in Blizzards: TC01
  46.  
  47.  
  48. #My pickle for the x and y values when moving the Stack of Doom#
  49. import pickle
  50. #My BugData for storing the x and y values when moving the SoD#
  51. import BugData
  52.  
  53.  
  54. # globals
  55. cf = CustomFunctions.CustomFunctions()
  56. gc = CyGlobalContext()
  57. localText = CyTranslator()
  58. PyPlayer = PyHelpers.PyPlayer
  59. PyInfo = PyHelpers.PyInfo
  60. sf = ScenarioFunctions.ScenarioFunctions()
  61. game = gc.getGame()
  62.  
  63. #FfH: Card Game: begin
  64. cs = CvCorporationScreen.cs
  65. #FfH: Card Game: end
  66.  
  67. Blizzards = Blizzards.Blizzards()               #Added in Blizzards: TC01
  68.  
  69. # globals
  70. ###################################################
  71. class CvEventManager:
  72.         def __init__(self):
  73.                 #################### ON EVENT MAP ######################
  74.                 #print "EVENTMANAGER INIT"
  75.  
  76.                 self.bCtrl = False
  77.                 self.bShift = False
  78.                 self.bAlt = False
  79.                 self.bAllowCheats = False
  80.  
  81.                 # OnEvent Enums
  82.                 self.EventLButtonDown=1
  83.                 self.EventLcButtonDblClick=2
  84.                 self.EventRButtonDown=3
  85.                 self.EventBack=4
  86.                 self.EventForward=5
  87.                 self.EventKeyDown=6
  88.                 self.EventKeyUp=7
  89.  
  90.                 self.__LOG_MOVEMENT = 0
  91.                 self.__LOG_BUILDING = 0
  92.                 self.__LOG_COMBAT = 0
  93.                 self.__LOG_CONTACT = 0
  94.                 self.__LOG_IMPROVEMENT =0
  95.                 self.__LOG_CITYLOST = 0
  96.                 self.__LOG_CITYBUILDING = 0
  97.                 self.__LOG_TECH = 0
  98.                 self.__LOG_UNITBUILD = 0
  99.                 self.__LOG_UNITKILLED = 1
  100.                 self.__LOG_UNITLOST = 0
  101.                 self.__LOG_UNITPROMOTED = 0
  102.                 self.__LOG_UNITSELECTED = 0
  103.                 self.__LOG_UNITPILLAGE = 0
  104.                 self.__LOG_GOODYRECEIVED = 0
  105.                 self.__LOG_GREATPERSON = 0
  106.                 self.__LOG_RELIGION = 0
  107.                 self.__LOG_RELIGIONSPREAD = 0
  108.                 self.__LOG_GOLDENAGE = 0
  109.                 self.__LOG_ENDGOLDENAGE = 0
  110.                 self.__LOG_WARPEACE = 0
  111.                 self.__LOG_PUSH_MISSION = 0
  112.  
  113.                 ## EVENTLIST
  114.                 self.EventHandlerMap = {
  115.                         'mouseEvent'                    : CvEventManager.onMouseEvent.__get__(self,CvEventManager),
  116.                         'kbdEvent'                              : CvEventManager.onKbdEvent.__get__(self,CvEventManager),
  117.                         'ModNetMessage'                                 : CvEventManager.onModNetMessage.__get__(self,CvEventManager),
  118.                         'Init'                                  : CvEventManager.onInit.__get__(self,CvEventManager),
  119.                         'Update'                                : CvEventManager.onUpdate.__get__(self,CvEventManager),
  120.                         'UnInit'                                : CvEventManager.onUnInit.__get__(self,CvEventManager),
  121.                         'OnSave'                                : CvEventManager.onSaveGame.__get__(self,CvEventManager),
  122.                         'OnPreSave'                             : CvEventManager.onPreSave.__get__(self,CvEventManager),
  123.                         'OnLoad'                                : CvEventManager.onLoadGame.__get__(self,CvEventManager),
  124.                         'GameStart'                             : CvEventManager.onGameStart.__get__(self,CvEventManager),
  125.                         'GameEnd'                               : CvEventManager.onGameEnd.__get__(self,CvEventManager),
  126.                         'plotRevealed'                  : CvEventManager.onPlotRevealed.__get__(self,CvEventManager),
  127.                         'plotFeatureRemoved'    : CvEventManager.onPlotFeatureRemoved.__get__(self,CvEventManager),
  128.                         'plotPicked'                    : CvEventManager.onPlotPicked.__get__(self,CvEventManager),
  129.                         'nukeExplosion'                 : CvEventManager.onNukeExplosion.__get__(self,CvEventManager),
  130.                         'gotoPlotSet'                   : CvEventManager.onGotoPlotSet.__get__(self,CvEventManager),
  131.                         'BeginGameTurn'                 : CvEventManager.onBeginGameTurn.__get__(self,CvEventManager),
  132.                         'EndGameTurn'                   : CvEventManager.onEndGameTurn.__get__(self,CvEventManager),
  133.                         'BeginPlayerTurn'               : CvEventManager.onBeginPlayerTurn.__get__(self,CvEventManager),
  134.                         'EndPlayerTurn'                 : CvEventManager.onEndPlayerTurn.__get__(self,CvEventManager),
  135.                         'endTurnReady'                  : CvEventManager.onEndTurnReady.__get__(self,CvEventManager),
  136.                         'combatResult'                  : CvEventManager.onCombatResult.__get__(self,CvEventManager),
  137.                         'combatLogCalc'                 : CvEventManager.onCombatLogCalc.__get__(self,CvEventManager),
  138.                         'combatLogHit'                  : CvEventManager.onCombatLogHit.__get__(self,CvEventManager),
  139.                         'improvementBuilt'              : CvEventManager.onImprovementBuilt.__get__(self,CvEventManager),
  140.                         'improvementDestroyed'  : CvEventManager.onImprovementDestroyed.__get__(self,CvEventManager),
  141.                         'routeBuilt'                    : CvEventManager.onRouteBuilt.__get__(self,CvEventManager),
  142.                         'firstContact'                  : CvEventManager.onFirstContact.__get__(self,CvEventManager),
  143.                         'cityBuilt'                             : CvEventManager.onCityBuilt.__get__(self,CvEventManager),
  144.                         'cityRazed'                             : CvEventManager.onCityRazed.__get__(self,CvEventManager),
  145.                         'cityAcquired'                  : CvEventManager.onCityAcquired.__get__(self,CvEventManager),
  146.                         'cityAcquiredAndKept'   : CvEventManager.onCityAcquiredAndKept.__get__(self,CvEventManager),
  147.                         'cityLost'                              : CvEventManager.onCityLost.__get__(self,CvEventManager),
  148.                         'cultureExpansion'              : CvEventManager.onCultureExpansion.__get__(self,CvEventManager),
  149.                         'cityGrowth'                    : CvEventManager.onCityGrowth.__get__(self,CvEventManager),
  150.                         'cityDoTurn'                    : CvEventManager.onCityDoTurn.__get__(self,CvEventManager),
  151.                         'cityBuildingUnit'      : CvEventManager.onCityBuildingUnit.__get__(self,CvEventManager),
  152.                         'cityBuildingBuilding'  : CvEventManager.onCityBuildingBuilding.__get__(self,CvEventManager),
  153.                         'cityRename'                            : CvEventManager.onCityRename.__get__(self,CvEventManager),
  154.                         'cityHurry'                             : CvEventManager.onCityHurry.__get__(self,CvEventManager),
  155.                         'selectionGroupPushMission'             : CvEventManager.onSelectionGroupPushMission.__get__(self,CvEventManager),
  156.                         'unitMove'                              : CvEventManager.onUnitMove.__get__(self,CvEventManager),
  157.                         'unitSetXY'                     : CvEventManager.onUnitSetXY.__get__(self,CvEventManager),
  158.                         'unitCreated'                   : CvEventManager.onUnitCreated.__get__(self,CvEventManager),
  159.                         'unitBuilt'                     : CvEventManager.onUnitBuilt.__get__(self,CvEventManager),
  160.                         'unitKilled'                    : CvEventManager.onUnitKilled.__get__(self,CvEventManager),
  161.                         'unitLost'                              : CvEventManager.onUnitLost.__get__(self,CvEventManager),
  162.                         'unitPromoted'                  : CvEventManager.onUnitPromoted.__get__(self,CvEventManager),
  163.                         'unitSelected'                  : CvEventManager.onUnitSelected.__get__(self,CvEventManager),
  164.                         'UnitRename'                            : CvEventManager.onUnitRename.__get__(self,CvEventManager),
  165.                         'unitPillage'                           : CvEventManager.onUnitPillage.__get__(self,CvEventManager),
  166.                         'unitSpreadReligionAttempt'     : CvEventManager.onUnitSpreadReligionAttempt.__get__(self,CvEventManager),
  167.                         'unitGifted'                            : CvEventManager.onUnitGifted.__get__(self,CvEventManager),
  168.                         'unitBuildImprovement'                          : CvEventManager.onUnitBuildImprovement.__get__(self,CvEventManager),
  169.                         'goodyReceived'         : CvEventManager.onGoodyReceived.__get__(self,CvEventManager),
  170.                         'greatPersonBorn'       : CvEventManager.onGreatPersonBorn.__get__(self,CvEventManager),
  171.                         'buildingBuilt'                 : CvEventManager.onBuildingBuilt.__get__(self,CvEventManager),
  172.                         'projectBuilt'                  : CvEventManager.onProjectBuilt.__get__(self,CvEventManager),
  173.                         'techAcquired'                  : CvEventManager.onTechAcquired.__get__(self,CvEventManager),
  174.                         'techSelected'                  : CvEventManager.onTechSelected.__get__(self,CvEventManager),
  175.                         'religionFounded'               : CvEventManager.onReligionFounded.__get__(self,CvEventManager),
  176.                         'religionSpread'                : CvEventManager.onReligionSpread.__get__(self,CvEventManager),
  177.                         'religionRemove'                : CvEventManager.onReligionRemove.__get__(self,CvEventManager),
  178.                         'corporationFounded'    : CvEventManager.onCorporationFounded.__get__(self,CvEventManager),
  179.                         'corporationSpread'             : CvEventManager.onCorporationSpread.__get__(self,CvEventManager),
  180.                         'corporationRemove'             : CvEventManager.onCorporationRemove.__get__(self,CvEventManager),
  181.                         'goldenAge'                             : CvEventManager.onGoldenAge.__get__(self,CvEventManager),
  182.                         'endGoldenAge'                  : CvEventManager.onEndGoldenAge.__get__(self,CvEventManager),
  183.                         'chat'                                  : CvEventManager.onChat.__get__(self,CvEventManager),
  184.                         'victory'                               : CvEventManager.onVictory.__get__(self,CvEventManager),
  185.                         'vassalState'                   : CvEventManager.onVassalState.__get__(self,CvEventManager),
  186.                         'changeWar'                             : CvEventManager.onChangeWar.__get__(self,CvEventManager),
  187.                         'setPlayerAlive'                : CvEventManager.onSetPlayerAlive.__get__(self,CvEventManager),
  188.                         'playerChangeStateReligion'             : CvEventManager.onPlayerChangeStateReligion.__get__(self,CvEventManager),
  189.                         'playerGoldTrade'               : CvEventManager.onPlayerGoldTrade.__get__(self,CvEventManager),
  190.                         'windowActivation'              : CvEventManager.onWindowActivation.__get__(self,CvEventManager),
  191.                         'gameUpdate'                    : CvEventManager.onGameUpdate.__get__(self,CvEventManager),             # sample generic event
  192.                 }
  193.  
  194.                 ################## Events List ###############################
  195.                 #
  196.                 # Dictionary of Events, indexed by EventID (also used at popup context id)
  197.                 #   entries have name, beginFunction, applyFunction [, randomization weight...]
  198.                 #
  199.                 # Normal events first, random events after
  200.                 #
  201.                 ################## Events List ###############################
  202.                 self.Events={
  203.                         CvUtil.EventEditCityName : ('EditCityName', self.__eventEditCityNameApply, self.__eventEditCityNameBegin),
  204.                         CvUtil.EventPlaceObject : ('PlaceObject', self.__eventPlaceObjectApply, self.__eventPlaceObjectBegin),
  205.                         CvUtil.EventAwardTechsAndGold: ('AwardTechsAndGold', self.__eventAwardTechsAndGoldApply, self.__eventAwardTechsAndGoldBegin),
  206.                         CvUtil.EventEditUnitName : ('EditUnitName', self.__eventEditUnitNameApply, self.__eventEditUnitNameBegin),
  207. ## Platy Builder ##
  208.                         CvUtil.EventWBLandmarkPopup : ('WBLandmarkPopup', self.__eventWBLandmarkPopupApply, self.__eventWBScriptPopupBegin),
  209.                         CvUtil.EventShowWonder: ('ShowWonder', self.__eventShowWonderApply, self.__eventShowWonderBegin),
  210.                         1111 : ('WBPlayerScript', self.__eventWBPlayerScriptPopupApply, self.__eventWBScriptPopupBegin),
  211.                         2222 : ('WBCityScript', self.__eventWBCityScriptPopupApply, self.__eventWBScriptPopupBegin),
  212.                         3333 : ('WBUnitScript', self.__eventWBUnitScriptPopupApply, self.__eventWBScriptPopupBegin),
  213.                         4444 : ('WBGameScript', self.__eventWBGameScriptPopupApply, self.__eventWBScriptPopupBegin),
  214.                         5555 : ('WBPlotScript', self.__eventWBPlotScriptPopupApply, self.__eventWBScriptPopupBegin),
  215. #Magister Start
  216.                         6666 : ('WBPlayerRename', self.__eventEditPlayerNameApply, self.__eventEditPlayerNameBegin),
  217.                         6777 : ('WBPlayerRename', self.__eventEditCivNameApply, self.__eventEditCivNameBegin),
  218.                         6888 : ('WBPlayerRename', self.__eventEditCivShortNameApply, self.__eventEditCivShortNameBegin),
  219.                         6999 : ('WBPlayerRename', self.__eventEditCivAdjApply, self.__eventEditCivAdjBegin),
  220. #Magister Stop
  221. ## Platy Builder ##
  222.                 }
  223. ## FfH Card Game: begin
  224.                 self.Events[CvUtil.EventSelectSolmniumPlayer] = ('selectSolmniumPlayer', self.__EventSelectSolmniumPlayerApply, self.__EventSelectSolmniumPlayerBegin)
  225.                 self.Events[CvUtil.EventSolmniumAcceptGame] = ('solmniumAcceptGame', self.__EventSolmniumAcceptGameApply, self.__EventSolmniumAcceptGameBegin)
  226.                 self.Events[CvUtil.EventSolmniumConcedeGame] = ('solmniumConcedeGame', self.__EventSolmniumConcedeGameApply, self.__EventSolmniumConcedeGameBegin)
  227. ## FfH Card Game: end
  228.  
  229. #################### EVENT STARTERS ######################
  230.         def handleEvent(self, argsList):
  231.                 'EventMgr entry point'
  232.                 # extract the last 6 args in the list, the first arg has already been consumed
  233.                 self.origArgsList = argsList    # point to original
  234.                 tag = argsList[0]                               # event type string
  235.                 idx = len(argsList)-6
  236.                 bDummy = False
  237.                 self.bDbg, bDummy, self.bAlt, self.bCtrl, self.bShift, self.bAllowCheats = argsList[idx:]
  238.                 ret = 0
  239.                 if self.EventHandlerMap.has_key(tag):
  240.                         fxn = self.EventHandlerMap[tag]
  241.                         ret = fxn(argsList[1:idx])
  242.                 return ret
  243.  
  244. #################### EVENT APPLY ######################
  245.         def beginEvent( self, context, argsList=-1 ):
  246.                 'Begin Event'
  247.                 entry = self.Events[context]
  248.                 return entry[2]( argsList )
  249.  
  250.         def applyEvent( self, argsList ):
  251.                 'Apply the effects of an event '
  252.                 context, playerID, netUserData, popupReturn = argsList
  253.  
  254.                 if context == CvUtil.PopupTypeEffectViewer:
  255.                         return CvDebugTools.g_CvDebugTools.applyEffectViewer( playerID, netUserData, popupReturn )
  256.  
  257.                 entry = self.Events[context]
  258.  
  259.                 if ( context not in CvUtil.SilentEvents ):
  260.                         self.reportEvent(entry, context, (playerID, netUserData, popupReturn) )
  261.                 return entry[1]( playerID, netUserData, popupReturn )   # the apply function
  262.  
  263.         def reportEvent(self, entry, context, argsList):
  264.                 'Report an Event to Events.log '
  265.                 if (gc.getGame().getActivePlayer() != -1):
  266.                         message = "DEBUG Event: %s (%s)" %(entry[0], gc.getActivePlayer().getName())
  267.                         CyInterface().addImmediateMessage(message,"")
  268.                         CvUtil.pyPrint(message)
  269.                 return 0
  270.  
  271. #################### ON EVENTS ######################
  272.         def onKbdEvent(self, argsList):
  273.                 'keypress handler - return 1 if the event was consumed'
  274.  
  275.                 eventType,key,mx,my,px,py = argsList
  276.                 game = gc.getGame()
  277.  
  278.                 if (self.bAllowCheats):
  279.                         # notify debug tools of input to allow it to override the control
  280.                         argsList = (eventType,key,self.bCtrl,self.bShift,self.bAlt,mx,my,px,py,gc.getGame().isNetworkMultiPlayer())
  281.                         if ( CvDebugTools.g_CvDebugTools.notifyInput(argsList) ):
  282.                                 return 0
  283.  
  284.                 if ( eventType == self.EventKeyDown ):
  285.                         theKey=int(key)
  286.  
  287. #FfH: Added by Kael 07/05/2008
  288.                         if (theKey == int(InputTypes.KB_LEFT)):
  289.                                 if self.bCtrl:
  290.                                                 CyCamera().SetBaseTurn(CyCamera().GetBaseTurn() - 45.0)
  291.                                                 return 1
  292.                                 elif self.bShift:
  293.                                                 CyCamera().SetBaseTurn(CyCamera().GetBaseTurn() - 10.0)
  294.                                                 return 1
  295.  
  296.                         if (theKey == int(InputTypes.KB_RIGHT)):
  297.                                         if self.bCtrl:
  298.                                                         CyCamera().SetBaseTurn(CyCamera().GetBaseTurn() + 45.0)
  299.                                                         return 1
  300.                                         elif self.bShift:
  301.                                                         CyCamera().SetBaseTurn(CyCamera().GetBaseTurn() + 10.0)
  302.                                                         return 1
  303. #FfH: End Add
  304.  
  305.                         CvCameraControls.g_CameraControls.handleInput( theKey )
  306.  
  307.                         if (self.bAllowCheats):
  308.                                 # Shift - T (Debug - No MP)
  309.                                 if (theKey == int(InputTypes.KB_T)):
  310.                                         if ( self.bShift ):
  311.                                                 CvEventManager.beginEvent(self,CvUtil.EventAwardTechsAndGold)
  312.                                                 #self.beginEvent(CvUtil.EventCameraControlPopup)
  313.                                                 return 1
  314.  
  315.                                 elif (theKey == int(InputTypes.KB_W)):
  316.                                         if ( self.bShift and self.bCtrl):
  317.                                                 CvEventManager.beginEvent(self,CvUtil.EventShowWonder)
  318.                                                 return 1
  319.  
  320.                                 # Shift - ] (Debug - currently mouse-overd unit, health += 10
  321.                                 elif (theKey == int(InputTypes.KB_LBRACKET) and self.bShift ):
  322.                                         unit = CyMap().plot(px, py).getUnit(0)
  323.                                         if ( not unit.isNone() ):
  324.                                                 d = min( unit.maxHitPoints()-1, unit.getDamage() + 10 )
  325.                                                 unit.setDamage( d, PlayerTypes.NO_PLAYER )
  326.  
  327.                                 # Shift - [ (Debug - currently mouse-overd unit, health -= 10
  328.                                 elif (theKey == int(InputTypes.KB_RBRACKET) and self.bShift ):
  329.                                         unit = CyMap().plot(px, py).getUnit(0)
  330.                                         if ( not unit.isNone() ):
  331.                                                 d = max( 0, unit.getDamage() - 10 )
  332.                                                 unit.setDamage( d, PlayerTypes.NO_PLAYER )
  333.  
  334.                                 elif (theKey == int(InputTypes.KB_F1)):
  335.                                         if ( self.bShift ):
  336.                                                 CvScreensInterface.replayScreen.showScreen(False)
  337.                                                 return 1
  338.                                         # don't return 1 unless you want the input consumed
  339.  
  340.                                 elif (theKey == int(InputTypes.KB_F2)):
  341.                                         if ( self.bShift ):
  342.                                                 import CvDebugInfoScreen
  343.                                                 CvScreensInterface.showDebugInfoScreen()
  344.                                                 return 1
  345.  
  346.                                 elif (theKey == int(InputTypes.KB_F3)):
  347.                                         if ( self.bShift ):
  348.                                                 CvScreensInterface.showDanQuayleScreen(())
  349.                                                 return 1
  350.  
  351.                                 elif (theKey == int(InputTypes.KB_F4)):
  352.                                         if ( self.bShift ):
  353.                                                 CvScreensInterface.showUnVictoryScreen(())
  354.                                                 return 1
  355.  
  356.                 return 0
  357.  
  358.         def onModNetMessage(self, argsList):
  359.                 'Called whenever CyMessageControl().sendModNetMessage() is called - this is all for you modders!'
  360.  
  361.                 iData1, iData2, iData3, iData4, iData5 = argsList
  362.  
  363. #               print("Modder's net message!")
  364. #               CvUtil.pyPrint( 'onModNetMessage' )
  365.  
  366. #FfH Card Game: begin
  367.                 if iData1 == CvUtil.Somnium : # iData1 == 0 : Solmnium message, iData2 = function, iData3 to iData5 = parameters
  368.                         if iData2 == 0 :
  369.                                 if (iData3 == gc.getGame().getActivePlayer()):
  370.                                         self.__EventSelectSolmniumPlayerBegin()
  371.                         elif iData2 == 1 :
  372.                                 if (iData4 == gc.getGame().getActivePlayer()):
  373.                                         self.__EventSolmniumConcedeGameBegin((iData3, iData4))
  374.                         else :
  375.                                 cs.applyAction(iData2, iData3, iData4, iData5)
  376. # FfH Card Game: end
  377.  
  378. ## OOS fix by Snarko
  379.                 elif (iData1 == CvUtil.ChangeCiv): #iData1 is unused, to allow for a condition here. It must not be zero (would trigger somnium)
  380.                         CyGame().reassignPlayerAdvanced(iData2, iData3, -1)
  381. ## Declare war to Barbarians.
  382.                 elif (iData1 == CvUtil.BarbarianWar):
  383.                         gc.getTeam(iData2).declareWar(iData3, False, WarPlanTypes.WARPLAN_TOTAL)
  384.                 elif (iData1 == CvUtil.HyboremWhisper):
  385.                         pPlayer = gc.getPlayer(iData2)
  386.                         pPlot = CyMap().plot(iData3, iData4)
  387.                         pCity = pPlot.getPlotCity()
  388.                         pPlayer.acquireCity(pCity, False, True)
  389.  
  390.         def onInit(self, argsList):
  391.                 'Called when Civ starts up'
  392.                 CvUtil.pyPrint( 'OnInit' )
  393.  
  394.         def onUpdate(self, argsList):
  395.                 'Called every frame'
  396.                 fDeltaTime = argsList[0]
  397.  
  398.                 # allow camera to be updated
  399.                 CvCameraControls.g_CameraControls.onUpdate( fDeltaTime )
  400.  
  401.         def onWindowActivation(self, argsList):
  402.                 'Called when the game window activates or deactivates'
  403.                 bActive = argsList[0]
  404.  
  405.         def onUnInit(self, argsList):
  406.                 'Called when Civ shuts down'
  407.                 CvUtil.pyPrint('OnUnInit')
  408.  
  409.         def onPreSave(self, argsList):
  410.                 "called before a game is actually saved"
  411.                 CvUtil.pyPrint('OnPreSave')
  412.  
  413.         def onSaveGame(self, argsList):
  414.                 "return the string to be saved - Must be a string"
  415.                 return ""
  416.  
  417.         def onLoadGame(self, argsList):
  418.                 CvAdvisorUtils.resetNoLiberateCities()
  419.                 return 0
  420.  
  421.         def onGameStart(self, argsList):
  422.                 'Called at the start of the game'
  423.  
  424.                 if CyGame().getWBMapScript():
  425.                         sf.gameStart()
  426.                 else:
  427.                         introMovie = CvIntroMovieScreen.CvIntroMovieScreen()
  428.                         introMovie.interfaceScreen()
  429.  
  430.                 if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_THAW):
  431. # Enhanced End of Winter - Adpated from FlavourMod
  432.                         '''            
  433.                         iDesert = gc.getInfoTypeForString('TERRAIN_DESERT')
  434.                         iGrass = gc.getInfoTypeForString('TERRAIN_GRASS')
  435.                         iPlains = gc.getInfoTypeForString('TERRAIN_PLAINS')
  436.                         iSnow = gc.getInfoTypeForString('TERRAIN_SNOW')
  437.                         iTundra = gc.getInfoTypeForString('TERRAIN_TUNDRA')
  438.                         for i in range (CyMap().numPlots()):
  439.                                 pPlot = CyMap().plotByIndex(i)
  440.                                 if pPlot.getFeatureType() == -1:
  441.                                         if pPlot.getImprovementType() == -1:
  442.                                                 if pPlot.isWater() == False:
  443.                                                         iTerrain = pPlot.getTerrainType()
  444.                                                         if iTerrain == iTundra:
  445.                                                                 pPlot.setTempTerrainType(iSnow, CyGame().getSorenRandNum(90, "Bob") + 10)
  446.                                                         if iTerrain == iGrass:
  447.                                                                 pPlot.setTempTerrainType(iTundra, CyGame().getSorenRandNum(90, "Bob") + 10)
  448.                                                         if iTerrain == iPlains:
  449.                                                                 pPlot.setTempTerrainType(iTundra, CyGame().getSorenRandNum(90, "Bob") + 10)
  450.                                                         if iTerrain == iDesert:
  451.                                                                 pPlot.setTempTerrainType(iPlains, CyGame().getSorenRandNum(90, "Bob") + 10)
  452.                         '''
  453.                         FLAT_WORLDS = ["ErebusWrap", "Erebus"]                  # map scripts with wrapping but no equator
  454.                         MAX_EOW_PERCENTAGE = 0.25                                               # percentage of EoW on total game turns
  455.                         THAW_DELAY_PERCENTAGE = 0.05                                    # don't start thawing for x percent of EoW
  456.  
  457.                         # forest varieties
  458.                         DECIDUOUS_FOREST = 0
  459.                         CONIFEROUS_FOREST = 1
  460.                         SNOWY_CONIFEROUS_FOREST = 2
  461.                        
  462.                         dice = gc.getGame().getSorenRand()
  463.  
  464.                         iDesert = gc.getInfoTypeForString('TERRAIN_DESERT')
  465.                         iGrass = gc.getInfoTypeForString('TERRAIN_GRASS')
  466.                         iMarsh = gc.getInfoTypeForString('TERRAIN_MARSH')
  467.                         iPlains = gc.getInfoTypeForString('TERRAIN_PLAINS')
  468.                         iSnow = gc.getInfoTypeForString('TERRAIN_SNOW')
  469.                         iTundra = gc.getInfoTypeForString('TERRAIN_TUNDRA')
  470.                         iIce = gc.getInfoTypeForString('FEATURE_ICE')
  471.                         iForest = gc.getInfoTypeForString('FEATURE_FOREST')
  472.                         iJungle = gc.getInfoTypeForString('FEATURE_JUNGLE')
  473.                         iBlizzard = gc.getInfoTypeForString('FEATURE_BLIZZARD')
  474.  
  475. #                       iTotalGameTurns = gc.getGameSpeedInfo(CyGame().getGameSpeedType()).getGameTurnInfo(0).iNumGameTurnsPerIncrement
  476. #                       iMaxEOWTurns = max(1, int(iTotalGameTurns * MAX_EOW_PERCENTAGE))
  477. #                       iThawDelayTurns = max(1, int(iMaxEOWTurns * THAW_DELAY_PERCENTAGE))
  478.  
  479.                         iMaxLatitude = max(CyMap().getTopLatitude(), abs(CyMap().getBottomLatitude()))
  480.                         bIsFlatWorld = not (CyMap().isWrapX() or CyMap().isWrapY()) or CyMap().getMapScriptName() in FLAT_WORLDS
  481.  
  482.                         for i in range (CyMap().numPlots()):
  483.                                 pPlot = CyMap().plotByIndex(i)
  484.                                 eTerrain = pPlot.getTerrainType()
  485.                                 eFeature = pPlot.getFeatureType()
  486.                                 iVariety = pPlot.getFeatureVariety()
  487.                                 eBonus = pPlot.getBonusType(TeamTypes.NO_TEAM)
  488.  
  489.                                 iTurns = dice.get(110, "Thaw") + 40
  490.                                 iTurns = (iTurns * gc.getGameSpeedInfo(CyGame().getGameSpeedType()).getVictoryDelayPercent()) / 100
  491.                                 if not bIsFlatWorld:
  492.                                         iLatitude = abs(pPlot.getLatitude())
  493.                                         iTurns = int(iTurns * ((float(iLatitude) / iMaxLatitude) ** 0.4))
  494. #                               iTurns += iThawDelayTurns
  495.  
  496.                                 # cover erebus' oceans and lakes in ice
  497.                                 if pPlot.isWater():
  498.                                         if bIsFlatWorld:
  499.                                                 if dice.get(100, "Bob") < 90:
  500.                                                         pPlot.setTempFeatureType(iIce, 0, iTurns)
  501.                                         elif iLatitude + 10 > dice.get(50, "Bob"):
  502.                                                 pPlot.setTempFeatureType(iIce, 0, iTurns)
  503.  
  504.                                 # change terrains to colder climate versions
  505.                                 if eTerrain == iTundra:
  506.                                         if dice.get(100, "Tundra to Snow") < 90:
  507.                                                 pPlot.setTempTerrainType(iSnow, iTurns)
  508.                                 elif eTerrain == iGrass:
  509.                                         if eFeature != iJungle:
  510.                                                 if dice.get(100, "Grass to Snow or Tundra") < 60:
  511.                                                         pPlot.setTempTerrainType(iSnow, iTurns)
  512.                                                 else:
  513.                                                         pPlot.setTempTerrainType(iTundra, iTurns)
  514.                                 elif eTerrain == iPlains:
  515.                                         if dice.get(100, "Plains to Snow or Tundra") < 30:
  516.                                                 pPlot.setTempTerrainType(iSnow, iTurns)
  517.                                         else:
  518.                                                 pPlot.setTempTerrainType(iTundra, iTurns)
  519.                                 elif eTerrain == iDesert:
  520.                                         if dice.get(100, "Desert to Tundra or Plains") < 50:
  521.                                                 pPlot.setTempTerrainType(iTundra, iTurns)
  522.                                         else:
  523.                                                 pPlot.setTempTerrainType(iPlains, iTurns)
  524.                                 elif eTerrain == iMarsh:
  525.                                         pPlot.setTempTerrainType(iGrass, iTurns)
  526.  
  527.                                 # change forests to colder climate versions
  528.                                 if eFeature == iForest:
  529.                                         if iVariety == DECIDUOUS_FOREST:
  530.                                                 pPlot.setTempFeatureType(iForest, CONIFEROUS_FOREST, iTurns)
  531.                                         elif iVariety == CONIFEROUS_FOREST:
  532.                                                 pPlot.setTempFeatureType(iForest, SNOWY_CONIFEROUS_FOREST, iTurns)
  533.                                 elif eFeature == iJungle:
  534.                                         pPlot.setTempFeatureType(iForest, DECIDUOUS_FOREST, iTurns)
  535.                                 elif eFeature == FeatureTypes.NO_FEATURE:
  536.                                         if dice.get(100, "Spawn Blizzard") < 5:
  537.                                                 pPlot.setFeatureType(iBlizzard, -1)
  538.  
  539.                                 # remove invalid bonuses or replace them (if food) with a valid surrogate
  540.                                 if eBonus != BonusTypes.NO_BONUS:
  541.                                         pPlot.setBonusType(BonusTypes.NO_BONUS)
  542.                                         if not pPlot.canHaveBonus(eBonus, True):
  543.                                                 if gc.getBonusInfo(eBonus).getYieldChange(YieldTypes.YIELD_FOOD) > 0:
  544.                                                         iPossibleTempFoodBonuses = []
  545.                                                         for iLoopBonus in range(gc.getNumBonusInfos()):
  546.                                                                 if gc.getBonusInfo(iLoopBonus).getYieldChange(YieldTypes.YIELD_FOOD) > 0:
  547.                                                                         if pPlot.canHaveBonus(iLoopBonus, True):
  548.                                                                                 iPossibleTempFoodBonuses.append(iLoopBonus)
  549.                                                         pPlot.setBonusType(eBonus)
  550.                                                         if len(iPossibleTempFoodBonuses) > 0:
  551.                                                                 pPlot.setTempBonusType(iPossibleTempFoodBonuses[dice.get(len(iPossibleTempFoodBonuses), "Bob")], iTurns)
  552.                                                         else:
  553.                                                                 pPlot.setTempBonusType(BonusTypes.NO_BONUS, iTurns)
  554.                                                 else:
  555.                                                         pPlot.setBonusType(eBonus)
  556.                                                         pPlot.setTempBonusType(BonusTypes.NO_BONUS, iTurns)
  557.                                         else:
  558.                                                 pPlot.setBonusType(eBonus)
  559.                         Blizzards.doBlizzardTurn()
  560. # End Enhanced End of Winter
  561.  
  562.                 for iPlayer in range(gc.getMAX_PLAYERS()):
  563.                         player = gc.getPlayer(iPlayer)
  564.                         if player.isAlive():
  565.                                 if player.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM'):
  566.                                         cf.showUniqueImprovements(iPlayer)
  567.  
  568.                 if not gc.getGame().isNetworkMultiPlayer():
  569.                         t = "TROPHY_FEAT_INTRODUCTION"
  570.                         if not CyGame().isHasTrophy(t):
  571.                                 CyGame().changeTrophyValue(t, 1)
  572.                                 sf.addPopupWB(CyTranslator().getText("TXT_KEY_FFH_INTRO",()),'art/interface/popups/FfHIntro.dds')
  573.  
  574.                 if CyGame().isOption(gc.getInfoTypeForString('GAMEOPTION_NO_BARBARIANS')) == False and (not CyGame().getWBMapScript()):
  575.                         iGoblinFort = gc.getInfoTypeForString('IMPROVEMENT_GOBLIN_FORT')
  576.                         bPlayer = gc.getPlayer(gc.getBARBARIAN_PLAYER())
  577.                         for i in range (CyMap().numPlots()):
  578.                                 pPlot = CyMap().plotByIndex(i)
  579.                                 if pPlot.getImprovementType() == iGoblinFort:
  580.                                         bPlayer.initUnit(gc.getInfoTypeForString('UNIT_ARCHER_SCORPION_CLAN'), pPlot.getX(), pPlot.getY(), UnitAITypes.UNITAI_LAIRGUARDIAN, DirectionTypes.DIRECTION_SOUTH)
  581.  
  582.                 if (gc.getGame().getGameTurnYear() == gc.getDefineINT("START_YEAR") and not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_START)):
  583.                         if not CyGame().getWBMapScript():
  584.                                 for iPlayer in range(gc.getMAX_PLAYERS()):
  585.                                         player = gc.getPlayer(iPlayer)
  586.                                         if player.isAlive() and player.isHuman():
  587.                                                 popupInfo = CyPopupInfo()
  588.                                                 popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN)
  589.                                                 popupInfo.setText(u"showDawnOfMan")
  590.                                                 popupInfo.addPopup(iPlayer)
  591.                 else:
  592.                         CyInterface().setSoundSelectionReady(True)
  593.  
  594.                 if gc.getGame().isPbem():
  595.                         for iPlayer in range(gc.getMAX_PLAYERS()):
  596.                                 player = gc.getPlayer(iPlayer)
  597.                                 if player.isAlive() and player.isHuman():
  598.                                         popupInfo = CyPopupInfo()
  599.                                         popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_DETAILS)
  600.                                         popupInfo.setOption1(False)
  601.                                         popupInfo.addPopup(iPlayer)
  602.  
  603.                 # Super Forts
  604.                 CyMap().calculateCanalAndChokePoints()
  605.  
  606.                 CvAdvisorUtils.resetNoLiberateCities()
  607.                
  608.                
  609.                 #Set the Armageddon Counter in World Builder rather than in python
  610.                 #CyGame().changeGlobalCounter(8)
  611.                
  612.                
  613.                 #Make the pop-up text for this scenario
  614.                 #Write a story in CIV4GameText_FFH2.xml
  615.                 sf.addPopupWB(CyTranslator().getText("TXT_KEY_WB_ELOHIM_SCENARIO_INTRO",()), 'art/interface/popups/Blood of Angels.dds')
  616.                
  617.                
  618.                
  619.                 #Find and set the Team (i.e. player) ID numbers for each civ in the game (could be done manually since it is a scenario with fixed civs)
  620.                 #ID's need to be remembered for the onBeginGameTurn section (so if code is moved away from CvEventManager.py to other files then use pickle + Bugdata to remember it perhaps?)
  621.                 for iGoodAndEvilPlayer in range(gc.getMAX_PLAYERS()):
  622.                         pGoodAndEvilPlayer = gc.getPlayer(iGoodAndEvilPlayer)
  623.                         if pGoodAndEvilPlayer.isAlive():
  624.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR'):
  625.                                         iBannorTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  626.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CALABIM'):
  627.                                         iCalabimTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  628.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CLAN_OF_EMBERS'):
  629.                                         iClanOfEmbersTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  630.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_DOVIELLO'):
  631.                                         iDovielloTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  632.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM'):
  633.                                         iElohimTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  634.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES'):
  635.                                         iKuriotatesTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  636.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  637.                                         iLjosalfarTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  638.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LUCHUIRP'):
  639.                                         iLuchuirpTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  640.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SHEAIM'):
  641.                                         iSheaimTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  642.                                 if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR'):
  643.                                         iSvartalfarTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  644.  
  645.                                
  646.                                        
  647.                 #Make the good civs at permanent peace with eachother, the evil civs at non-permanent peace with eachother, and the good and evil civs at war          
  648.                 #If the setPermanentWarPeace boolean is True then the civs cannot change their peace or war status.  Use declareWar first to keep them at war with the True boolean.
  649.                 #If the declareWar boolean is True then you get a pop-up message that the civ declares war on you, if it is False then there is no pop-up message
  650.                 #If the meet boolean is True then you get a pop-up message that you met them for the first time, if it is False then there is no pop-up message
  651.                
  652.                 for iWarAndPeaceTeam in range(gc.getMAX_CIV_TEAMS()):
  653.                         pWarAndPeaceTeam = gc.getTeam(iWarAndPeaceTeam)
  654.                         if pWarAndPeaceTeam.isAlive():
  655.                                 #Make good civs meet other good civs
  656.                                 if iWarAndPeaceTeam == iBannorTeamID:
  657.                                         pWarAndPeaceTeam.meet(iElohimTeamID, False)
  658.                                         pWarAndPeaceTeam.meet(iKuriotatesTeamID, False)
  659.                                         pWarAndPeaceTeam.meet(iLjosalfarTeamID, False)
  660.                                         pWarAndPeaceTeam.meet(iLuchuirpTeamID, False)
  661.                                 if iWarAndPeaceTeam == iElohimTeamID:
  662.                                         pWarAndPeaceTeam.meet(iKuriotatesTeamID, False)
  663.                                         pWarAndPeaceTeam.meet(iLjosalfarTeamID, False)
  664.                                         pWarAndPeaceTeam.meet(iLuchuirpTeamID, False)
  665.                                 if iWarAndPeaceTeam == iKuriotatesTeamID:
  666.                                         pWarAndPeaceTeam.meet(iLjosalfarTeamID, False)
  667.                                         pWarAndPeaceTeam.meet(iLuchuirpTeamID, False)
  668.                                 if iWarAndPeaceTeam == iLjosalfarTeamID:
  669.                                         pWarAndPeaceTeam.meet(iLuchuirpTeamID, False)
  670.                                 #Make evil civs meet other evil civs
  671.                                 if iWarAndPeaceTeam == iCalabimTeamID:
  672.                                         pWarAndPeaceTeam.meet(iClanOfEmbersTeamID, False)
  673.                                         pWarAndPeaceTeam.meet(iDovielloTeamID, False)
  674.                                         pWarAndPeaceTeam.meet(iSheaimTeamID, False)
  675.                                         pWarAndPeaceTeam.meet(iSvartalfarTeamID, False)
  676.                                 if iWarAndPeaceTeam == iClanOfEmbersTeamID:
  677.                                         pWarAndPeaceTeam.meet(iDovielloTeamID, False)
  678.                                         pWarAndPeaceTeam.meet(iSheaimTeamID, False)
  679.                                         pWarAndPeaceTeam.meet(iSvartalfarTeamID, False)
  680.                                 if iWarAndPeaceTeam == iDovielloTeamID:
  681.                                         pWarAndPeaceTeam.meet(iSheaimTeamID, False)
  682.                                         pWarAndPeaceTeam.meet(iSvartalfarTeamID, False)
  683.                                 if iWarAndPeaceTeam == iSheaimTeamID:
  684.                                         pWarAndPeaceTeam.meet(iSvartalfarTeamID, False)                
  685.                                 #This section makes the evils civs at war with the good civs
  686.                                 if iWarAndPeaceTeam == iCalabimTeamID:
  687.                                         pWarAndPeaceTeam.declareWar(iBannorTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  688.                                         pWarAndPeaceTeam.setPermanentWarPeace(iBannorTeamID, True)
  689.                                         pWarAndPeaceTeam.declareWar(iElohimTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  690.                                         pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, True)
  691.                                         pWarAndPeaceTeam.declareWar(iKuriotatesTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  692.                                         pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  693.                                         pWarAndPeaceTeam.declareWar(iLjosalfarTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  694.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  695.                                         pWarAndPeaceTeam.declareWar(iLuchuirpTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  696.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  697.                                 if iWarAndPeaceTeam == iClanOfEmbersTeamID:
  698.                                         pWarAndPeaceTeam.declareWar(iBannorTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  699.                                         pWarAndPeaceTeam.setPermanentWarPeace(iBannorTeamID, True)
  700.                                         pWarAndPeaceTeam.declareWar(iElohimTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  701.                                         pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, True)
  702.                                         pWarAndPeaceTeam.declareWar(iKuriotatesTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  703.                                         pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  704.                                         pWarAndPeaceTeam.declareWar(iLjosalfarTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  705.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  706.                                         pWarAndPeaceTeam.declareWar(iLuchuirpTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  707.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  708.                                 if iWarAndPeaceTeam == iDovielloTeamID:
  709.                                         pWarAndPeaceTeam.declareWar(iBannorTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  710.                                         pWarAndPeaceTeam.setPermanentWarPeace(iBannorTeamID, True)
  711.                                         pWarAndPeaceTeam.declareWar(iElohimTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  712.                                         pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, True)
  713.                                         pWarAndPeaceTeam.declareWar(iKuriotatesTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  714.                                         pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  715.                                         pWarAndPeaceTeam.declareWar(iLjosalfarTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  716.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  717.                                         pWarAndPeaceTeam.declareWar(iLuchuirpTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  718.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  719.                                 if iWarAndPeaceTeam == iSheaimTeamID:
  720.                                         pWarAndPeaceTeam.declareWar(iBannorTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  721.                                         pWarAndPeaceTeam.setPermanentWarPeace(iBannorTeamID, True)
  722.                                         pWarAndPeaceTeam.declareWar(iElohimTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  723.                                         pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, True)
  724.                                         pWarAndPeaceTeam.declareWar(iKuriotatesTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  725.                                         pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  726.                                         pWarAndPeaceTeam.declareWar(iLjosalfarTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  727.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  728.                                         pWarAndPeaceTeam.declareWar(iLuchuirpTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  729.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  730.                                 if iWarAndPeaceTeam == iSvartalfarTeamID:
  731.                                         pWarAndPeaceTeam.declareWar(iBannorTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  732.                                         pWarAndPeaceTeam.setPermanentWarPeace(iBannorTeamID, True)
  733.                                         pWarAndPeaceTeam.declareWar(iElohimTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  734.                                         pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, True)
  735.                                         pWarAndPeaceTeam.declareWar(iKuriotatesTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  736.                                         pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  737.                                         pWarAndPeaceTeam.declareWar(iLjosalfarTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  738.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  739.                                         pWarAndPeaceTeam.declareWar(iLuchuirpTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  740.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  741.                                 #This makes good civs be at peace with good civs
  742.                                 if iWarAndPeaceTeam == iBannorTeamID:
  743.                                         pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, True)
  744.                                         pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  745.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  746.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  747.                                 if iWarAndPeaceTeam == iElohimTeamID:
  748.                                         pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  749.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  750.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  751.                                 if iWarAndPeaceTeam == iKuriotatesTeamID:
  752.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  753.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  754.                                 if iWarAndPeaceTeam == iLjosalfarTeamID:
  755.                                         pWarAndPeaceTeam.setPermanentWarPeace(iLuchuirpTeamID, True)
  756.                
  757.                
  758.                 #Try setting the attitudes between evil and good civs at -100 using VOID AI_setAttitudeExtra (PlayerType eIndex, INT iNewValue) and making iNewValue == -100
  759.                 #pDovPlayer.AI_setAttitudeExtra(0, 100) makes the Doviello have a +100 attitude with the human player (maybe human player is 0 on eIndex and Doviello player is pDovPlayer)
  760.                 #pWarAndPeaceCiv.AI_setAttitudeExtra(iNAMECivID, -100)
  761.                 #setAttitude only works in reference to the Player not the Team
  762.                 #bPlayer = gc.getPlayer(gc.getBARBARIAN_PLAYER()) will get the barbarian player - can something similar be done to find each good civ and each evil civ?
  763.                
  764.                 #This section becomes irrelevant if war is set in python already
  765.                 #This gets CivID's for each player firstly
  766.                 for iGoodVsEvilPlayer in range(gc.getMAX_PLAYERS()):
  767.                         pGoodVsEvilPlayer = gc.getPlayer(iGoodVsEvilPlayer)
  768.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR'):
  769.                                 iBannorCivID = pGoodVsEvilPlayer.getID()
  770.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CALABIM'):
  771.                                 iCalabimCivID = pGoodVsEvilPlayer.getID()      
  772.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CLAN_OF_EMBERS'):
  773.                                 iClanOfEmbersCivID = pGoodVsEvilPlayer.getID()
  774.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_DOVIELLO'):
  775.                                 iDovielloCivID = pGoodVsEvilPlayer.getID()     
  776.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM'):
  777.                                 iElohimCivID = pGoodVsEvilPlayer.getID()       
  778.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES'):
  779.                                 iKuriotatesCivID = pGoodVsEvilPlayer.getID()   
  780.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  781.                                 iLjosalfarCivID = pGoodVsEvilPlayer.getID()    
  782.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LUCHUIRP'):
  783.                                 iLuchuirpCivID = pGoodVsEvilPlayer.getID()     
  784.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SHEAIM'):
  785.                                 iSheaimCivID = pGoodVsEvilPlayer.getID()       
  786.                         if pGoodVsEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR'):
  787.                                 iSvartalfarCivID = pGoodVsEvilPlayer.getID()   
  788.  
  789.                 #This uses those CivID's from above to set negative attitudes between good and evil civs
  790.                 #This was done to work out a solution to the AI not building cities issue but it didn't work.  Might be useful for something else though.
  791.                 for iGoodVsEvilPlayer2 in range(gc.getMAX_PLAYERS()):
  792.                         pGoodVsEvilPlayer2 = gc.getPlayer(iGoodVsEvilPlayer2)
  793.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR'):
  794.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iCalabimCivID, -100)
  795.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iClanOfEmbersCivID, -100)
  796.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iDovielloCivID, -100)
  797.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSheaimCivID, -100)
  798.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSvartalfarCivID, -100)
  799.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CALABIM'):
  800.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iBannorCivID, -100)
  801.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iElohimCivID, -100)
  802.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iKuriotatesCivID, -100)
  803.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLjosalfarCivID, -100)
  804.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLuchuirpCivID, -100)
  805.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CLAN_OF_EMBERS'):
  806.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iBannorCivID, -100)
  807.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iElohimCivID, -100)
  808.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iKuriotatesCivID, -100)
  809.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLjosalfarCivID, -100)
  810.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLuchuirpCivID, -100)
  811.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_DOVIELLO'):
  812.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iBannorCivID, -100)
  813.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iElohimCivID, -100)
  814.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iKuriotatesCivID, -100)
  815.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLjosalfarCivID, -100)
  816.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLuchuirpCivID, -100)
  817.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM'):
  818.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iCalabimCivID, -100)
  819.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iClanOfEmbersCivID, -100)
  820.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iDovielloCivID, -100)
  821.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSheaimCivID, -100)
  822.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSvartalfarCivID, -100)
  823.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES'):
  824.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iCalabimCivID, -100)
  825.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iClanOfEmbersCivID, -100)
  826.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iDovielloCivID, -100)
  827.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSheaimCivID, -100)
  828.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSvartalfarCivID, -100)
  829.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  830.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iCalabimCivID, -100)
  831.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iClanOfEmbersCivID, -100)
  832.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iDovielloCivID, -100)
  833.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSheaimCivID, -100)
  834.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSvartalfarCivID, -100)
  835.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LUCHUIRP'):
  836.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iCalabimCivID, -100)
  837.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iClanOfEmbersCivID, -100)
  838.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iDovielloCivID, -100)
  839.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSheaimCivID, -100)
  840.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iSvartalfarCivID, -100)
  841.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SHEAIM'):
  842.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iBannorCivID, -100)
  843.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iElohimCivID, -100)
  844.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iKuriotatesCivID, -100)
  845.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLjosalfarCivID, -100)
  846.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLuchuirpCivID, -100)
  847.                         if pGoodVsEvilPlayer2.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR'):
  848.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iBannorCivID, -100)
  849.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iElohimCivID, -100)
  850.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iKuriotatesCivID, -100)
  851.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLjosalfarCivID, -100)
  852.                                 pGoodVsEvilPlayer2.AI_setAttitudeExtra(iLuchuirpCivID, -100)
  853.  
  854.  
  855.                                        
  856.         def onGameEnd(self, argsList):
  857.                 'Called at the End of the game'
  858.                 print("Game is ending")
  859.                 return
  860.  
  861.         def onBeginGameTurn(self, argsList):
  862.                 'Called at the beginning of the end of each turn'
  863.                 iGameTurn = argsList[0]
  864.  
  865.                 if not CyGame().isUnitClassMaxedOut(gc.getInfoTypeForString('UNITCLASS_ORTHUS'), 0):
  866.                         if not CyGame().isOption(gc.getInfoTypeForString('GAMEOPTION_NO_ORTHUS')):
  867.                                 iOrthusTurn = 75
  868.                                 bOrthus = False
  869.                                 if CyGame().getGameSpeedType() == gc.getInfoTypeForString('GAMESPEED_QUICK'):
  870.                                         if iGameTurn >= iOrthusTurn / 3 * 2:
  871.                                                 bOrthus = True
  872.                                 elif CyGame().getGameSpeedType() == gc.getInfoTypeForString('GAMESPEED_NORMAL'):
  873.                                         if iGameTurn >= iOrthusTurn:
  874.                                                 bOrthus = True
  875.                                 elif CyGame().getGameSpeedType() == gc.getInfoTypeForString('GAMESPEED_EPIC'):
  876.                                         if iGameTurn >= iOrthusTurn * 3 / 2:
  877.                                                 bOrthus = True
  878.                                 elif CyGame().getGameSpeedType() == gc.getInfoTypeForString('GAMESPEED_MARATHON'):
  879.                                         if iGameTurn >= iOrthusTurn * 3:
  880.                                                 bOrthus = True
  881.                                 if bOrthus:
  882.                                         bValid=True
  883.                                         for i in range (CyMap().numPlots()):
  884.                                                 pPlot = CyMap().plotByIndex(i)
  885.                                                 iPlot = -1
  886.                                                 if pPlot.getImprovementType()==gc.getInfoTypeForString('IMPROVEMENT_GOBLIN_FORT'):
  887.                                                         bPlayer = gc.getPlayer(gc.getBARBARIAN_PLAYER())
  888.                                                         if not pPlot.isVisibleOtherUnit(gc.getBARBARIAN_PLAYER()):
  889.                                                                 bPlayer.initUnit(gc.getInfoTypeForString('UNIT_ORTHUS'), pPlot.getX(), pPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
  890.                                                                 bValid=False
  891.                                                                 break
  892.                                         if bValid:
  893.                                                 iUnit = gc.getInfoTypeForString('UNIT_ORTHUS')
  894.                                                 cf.addUnit(iUnit)
  895.                                                 if( CyGame().getAIAutoPlay(CyGame().getActivePlayer()) == 0 ) :
  896.                                                         cf.addPopup(CyTranslator().getText("TXT_KEY_POPUP_ORTHUS_CREATION",()), str(gc.getUnitInfo(iUnit).getImage()))
  897.  
  898.                 if not CyGame().isOption(gc.getInfoTypeForString('GAMEOPTION_NO_PLOT_COUNTER')):
  899.                         cf.doHellTerrain()
  900.  
  901.                 if CyGame().getWBMapScript():
  902.                         sf.doTurn()
  903.  
  904. # FfH Card Game: begin
  905.                 cs.doTurn()
  906. # FfH Card Game: end
  907.  
  908.                 Blizzards.doBlizzardTurn()              #Added in Blizzards: TC01
  909.                
  910. #               if( CyGame().getAIAutoPlay(self) == 0 ) :
  911.                 if( game.getAIAutoPlay(game.getActivePlayer()) == 0 ) :
  912.                         CvTopCivs.CvTopCivs().turnChecker(iGameTurn)
  913.                        
  914.                
  915.                 #Check if each evil team is alive and if so, add 0.1 to the AC
  916.                 #Check if Luchuirp have turned evil (maybe by checking if they are at war with Elohim) and if they are alive and if so, add 0.5 to the AC
  917.                 #       if gc.getTeam(iLuchuirpTeamID).isAlive:
  918.                 #               if gc.getTeam(iLuchuirpTeamID).isAtWar(iElohimTeamID):
  919.                
  920.                 #Makes the human Elohim player win if the AC = 0, #2 is a conquest victory (change this to the diplo victory). Also make Elohim win if a complete conquest victory is achieved.
  921.                 iElohimPlayer = 0
  922.                 pElohimPlayer = gc.getPlayer(iElohimPlayer)
  923.                 if CyGame().getGlobalCounter() <= 0:
  924.                         gc.getGame().setWinner(pElohimPlayer.getTeam(), 6)
  925.                        
  926.                 #Debug to test if the victory condition is working
  927.                 #CyGame().changeGlobalCounter(-2)
  928.                
  929.                
  930.                 #I need to redo the teamID's because they are forgotten from onGameStart
  931.                 for iGoodAndEvilPlayer in range(gc.getMAX_PLAYERS()):
  932.                         pGoodAndEvilPlayer = gc.getPlayer(iGoodAndEvilPlayer)
  933.                         #if pGoodAndEvilPlayer.isAlive(): #This line breaks the code
  934.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR'):
  935.                                 iBannorTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  936.                                 iBannorPower = gc.getTeam(iBannorTeamID).getPower(True)
  937.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CALABIM'):
  938.                                 iCalabimTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  939.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_CLAN_OF_EMBERS'):
  940.                                 iClanOfEmbersTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  941.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_DOVIELLO'):
  942.                                 iDovielloTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  943.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM'):
  944.                                 iElohimTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  945.                                 iElohimPower = gc.getTeam(iElohimTeamID).getPower(True)
  946.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES'):
  947.                                 iKuriotatesTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  948.                                 iKuriotatesPower = gc.getTeam(iKuriotatesTeamID).getPower(True)
  949.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  950.                                 iLjosalfarTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  951.                                 iLjosalfarPower = gc.getTeam(iLjosalfarTeamID).getPower(True)
  952.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LUCHUIRP'):
  953.                                 iLuchuirpTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  954.                                 iLuchuirpPower = gc.getTeam(iLuchuirpTeamID).getPower(True)
  955.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SHEAIM'):
  956.                                 iSheaimTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  957.                         if pGoodAndEvilPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR'):
  958.                                 iSvartalfarTeamID = gc.getPlayer(iGoodAndEvilPlayer).getTeam()
  959.  
  960.                                
  961.                
  962.                 #Increase the AC for each evil civ alive (and slightly more if Luchuirp have turned evil)
  963.                 #Has a 1 in 22 chance of increasing the AC by 1 point each turn (the AC is an integer only)
  964.                 if gc.getTeam(iCalabimTeamID).isAlive:
  965.                         if CyGame().getSorenRandNum(22, "CalabimAC") <= 1:
  966.                                 CyGame().changeGlobalCounter(1)
  967.                 if gc.getTeam(iClanOfEmbersTeamID).isAlive:                            
  968.                         if CyGame().getSorenRandNum(22, "ClanOfEmbersAC") <= 1:
  969.                                 CyGame().changeGlobalCounter(1)
  970.                 if gc.getTeam(iDovielloTeamID).isAlive:                        
  971.                         if CyGame().getSorenRandNum(22, "DovielloAC") <= 1:
  972.                                 CyGame().changeGlobalCounter(1)
  973.                 if gc.getTeam(iSheaimTeamID).isAlive:                          
  974.                         if CyGame().getSorenRandNum(22, "SheaimAC") <= 1:
  975.                                 CyGame().changeGlobalCounter(1)
  976.                 if gc.getTeam(iSvartalfarTeamID).isAlive:                              
  977.                         if CyGame().getSorenRandNum(22, "SvartalfarAC") <= 1:
  978.                                 CyGame().changeGlobalCounter(1)
  979.                 if gc.getTeam(iLuchuirpTeamID).isAtWar(iElohimTeamID):
  980.                         if CyGame().getSorenRandNum(22, "LuchuirpWarAC") <= 2:
  981.                                 CyGame().changeGlobalCounter(1)                
  982.                                
  983.                
  984.                 #If the civ isn't alive then the score won't be defined and therefore will cause an error when used
  985.                 if not gc.getTeam(iLuchuirpTeamID).isAlive:
  986.                         iLuchuirpPower = 0
  987.                 if not gc.getTeam(iBannorTeamID).isAlive:
  988.                         iBannorPower = 0
  989.                 if not gc.getTeam(iElohimTeamID).isAlive:
  990.                         iElohimPower = 0
  991.                 if not gc.getTeam(iKuriotatesTeamID).isAlive:
  992.                         iKuriotatesPower = 0
  993.                 if not gc.getTeam(iLjosalfarTeamID).isAlive:
  994.                         iLjosalfarPower = 0
  995.                        
  996.                        
  997.                
  998.                 #Make the Luchuirp declare war on the other good civs if the Luchuirp power > (Elohim + Ljosalfar + Kuriotates + Bannor) power
  999.                 #Elohim will always be alive while the game is running since that is the player
  1000.                 #If the setPermanentWarPeace boolean is True then the civs cannot change their peace or war status.  Use declareWar first to keep them at war with the True boolean.
  1001.                 #If the declareWar boolean is True then you get a pop-up message that the civ declares war on you, if it is False then there is no pop-up message
  1002.                 if gc.getTeam(iLuchuirpTeamID).isAlive:
  1003.                         if not gc.getTeam(iLuchuirpTeamID).isAtWar(iElohimTeamID):
  1004.                                 if iLuchuirpPower > (iBannorPower + iElohimPower + iKuriotatesPower + iLjosalfarPower):
  1005.                                         sf.addPopupWB(CyTranslator().getText("TXT_KEY_WB_ELOHIM_SCENARIO_LUCHUIRP_WAR_GOOD",()),'')
  1006.                                         for iWarAndPeaceTeam in range(gc.getMAX_CIV_TEAMS()):
  1007.                                                 pWarAndPeaceTeam = gc.getTeam(iWarAndPeaceTeam)
  1008.                                                 if pWarAndPeaceTeam.isAlive():
  1009.                                                         if iWarAndPeaceTeam == iLuchuirpTeamID:
  1010.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iBannorTeamID, False)
  1011.                                                                 pWarAndPeaceTeam.declareWar(iBannorTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  1012.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iBannorTeamID, True)
  1013.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, False)
  1014.                                                                 pWarAndPeaceTeam.declareWar(iElohimTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  1015.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iElohimTeamID, True)
  1016.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, False)
  1017.                                                                 pWarAndPeaceTeam.declareWar(iKuriotatesTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  1018.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iKuriotatesTeamID, True)
  1019.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, False)
  1020.                                                                 pWarAndPeaceTeam.declareWar(iLjosalfarTeamID, False, WarPlanTypes.WARPLAN_TOTAL)
  1021.                                                                 pWarAndPeaceTeam.setPermanentWarPeace(iLjosalfarTeamID, True)
  1022.                        
  1023.  
  1024.                        
  1025.                 #Marshalling tile = (59,11)
  1026.                 #Target tile = (16,10)
  1027.                 #Move SoD units to marshalling tile from Turn 200-300
  1028.                 #Move SoD units from mashalling tile to target tile from Turn 300-350
  1029.                
  1030.                 #SoD promotion is given to units built within a certain time period in onUnitBuilt
  1031.                
  1032.                 #Get rid of HELD promotion for all SoD units once they reach the target tile because SoD's not in the stack get stuck on the way to the marshalling point!#
  1033.                 #This may cause bugs if new cities are made etc - maybe change to checking what turn it is?
  1034.                 #This code moves the SoD units from the cities to the marshalling tile#
  1035.                 #Maybe just get rid of the HELD promotion if it tries to move into an illegal tile instead of trying to move it around#
  1036.                 #Change lines 1037, 1808, 1822, 2380, 2422, 2446, 2455, 3650, 3677
  1037.                 if iGameTurn < 60 and iGameTurn > 10:
  1038.                         for iGoodSofDPlayer in range(gc.getMAX_PLAYERS()):
  1039.                                 pGoodSofDPlayer = gc.getPlayer(iGoodSofDPlayer)
  1040.                                 if (pGoodSofDPlayer.isAlive()):
  1041.                                         if pGoodSofDPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR'):
  1042.                                                 pySofD = PyPlayer(iGoodSofDPlayer)
  1043.                                                 if pGoodSofDPlayer.getNumUnits() > 0:
  1044.                                                         for pMayMoveUnit in pySofD.getUnitList():
  1045.                                                                 if pMayMoveUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SofD')):
  1046.                                                                         iSoDUnitMoved = 0
  1047.                                                                         if pMayMoveUnit.getY() < 11:
  1048.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1049.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1050.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() + 1)
  1051.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1052.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1053.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1054.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1055.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1056.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1057.                                                                                                                         iSoDUnitMoved = 1
  1058.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1059.                                                                                                                                 iSoDUnitMoved = 1
  1060.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1061.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1062.                                                                                                                                 iSoDUnitMoved = 1
  1063.                                                                                                 if pPossiblePlot.getNumUnits() == 0:
  1064.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1065.                                                                                                         iSoDUnitMoved = 1                                                                                      
  1066.                                                                                                 #War is done by team so either don't keep moving if another unit is there or find the Elohim team and find the other unit's team
  1067.                                                                                                 #Elohim team ID is always 0 because it is the human player
  1068.                                                                                                 #War with Elohim is used as a proxy for war with any of the other good civs
  1069.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1070.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() + 1)
  1071.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1072.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1073.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1074.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1075.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1076.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1077.                                                                                                                         iSoDUnitMoved = 1
  1078.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1079.                                                                                                                                 iSoDUnitMoved = 1
  1080.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1081.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1082.                                                                                                                                 iSoDUnitMoved = 1
  1083.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1084.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1085.                                                                                                         iSoDUnitMoved = 1
  1086.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1087.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() + 1)
  1088.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1089.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1090.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1091.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1092.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1093.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1094.                                                                                                                         iSoDUnitMoved = 1
  1095.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1096.                                                                                                                                 iSoDUnitMoved = 1
  1097.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1098.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1099.                                                                                                                                 iSoDUnitMoved = 1
  1100.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1101.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1102.                                                                                                         iSoDUnitMoved = 1                                                                                              
  1103.                                                                         if pMayMoveUnit.getY() > 11:
  1104.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1105.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1106.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() - 1)
  1107.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1108.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1109.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1110.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1111.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1112.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1113.                                                                                                                         iSoDUnitMoved = 1
  1114.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1115.                                                                                                                                 iSoDUnitMoved = 1
  1116.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1117.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1118.                                                                                                                                 iSoDUnitMoved = 1
  1119.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1120.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1121.                                                                                                         iSoDUnitMoved = 1
  1122.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1123.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() - 1)
  1124.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1125.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1126.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1127.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1128.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1129.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1130.                                                                                                                         iSoDUnitMoved = 1
  1131.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1132.                                                                                                                                 iSoDUnitMoved = 1
  1133.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1134.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1135.                                                                                                                                 iSoDUnitMoved = 1
  1136.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1137.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1138.                                                                                                         iSoDUnitMoved = 1
  1139.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1140.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() - 1)
  1141.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1142.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1143.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1144.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1145.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1146.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1147.                                                                                                                         iSoDUnitMoved = 1
  1148.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1149.                                                                                                                                 iSoDUnitMoved = 1
  1150.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1151.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1152.                                                                                                                                 iSoDUnitMoved = 1
  1153.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1154.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1155.                                                                                                         iSoDUnitMoved = 1
  1156.                                                                         if pMayMoveUnit.getY() == 11:
  1157.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1158.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1159.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY())
  1160.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1161.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1162.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1163.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1164.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1165.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1166.                                                                                                                         iSoDUnitMoved = 1
  1167.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1168.                                                                                                                                 iSoDUnitMoved = 1
  1169.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1170.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1171.                                                                                                                                 iSoDUnitMoved = 1
  1172.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1173.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1174.                                                                                                         iSoDUnitMoved = 1
  1175.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1176.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY())
  1177.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1178.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1179.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1180.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1181.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1182.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1183.                                                                                                                         iSoDUnitMoved = 1
  1184.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1185.                                                                                                                                 iSoDUnitMoved = 1
  1186.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1187.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1188.                                                                                                                                 iSoDUnitMoved = 1
  1189.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1190.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1191.                                                                                                         iSoDUnitMoved = 1
  1192.                                         if pGoodSofDPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM'):
  1193.                                                 pySofD = PyPlayer(iGoodSofDPlayer)
  1194.                                                 if pGoodSofDPlayer.getNumUnits() > 0:
  1195.                                                         for pMayMoveUnit in pySofD.getUnitList():
  1196.                                                                 if pMayMoveUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SofD')):
  1197.                                                                         iSoDUnitMoved = 0
  1198.                                                                         if pMayMoveUnit.getY() < 11:
  1199.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1200.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1201.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() + 1)
  1202.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1203.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1204.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1205.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1206.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1207.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1208.                                                                                                                         iSoDUnitMoved = 1
  1209.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1210.                                                                                                                                 iSoDUnitMoved = 1
  1211.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1212.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1213.                                                                                                                                 iSoDUnitMoved = 1
  1214.                                                                                                 if pPossiblePlot.getNumUnits() == 0:
  1215.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1216.                                                                                                         iSoDUnitMoved = 1                                                                                      
  1217.                                                                                                 #War is done by team so either don't keep moving if another unit is there or find the Elohim team and find the other unit's team
  1218.                                                                                                 #Elohim team ID is always 0 because it is the human player
  1219.                                                                                                 #War with Elohim is used as a proxy for war with any of the other good civs
  1220.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1221.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() + 1)
  1222.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1223.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1224.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1225.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1226.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1227.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1228.                                                                                                                         iSoDUnitMoved = 1
  1229.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1230.                                                                                                                                 iSoDUnitMoved = 1
  1231.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1232.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1233.                                                                                                                                 iSoDUnitMoved = 1
  1234.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1235.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1236.                                                                                                         iSoDUnitMoved = 1
  1237.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1238.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() + 1)
  1239.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1240.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1241.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1242.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1243.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1244.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1245.                                                                                                                         iSoDUnitMoved = 1
  1246.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1247.                                                                                                                                 iSoDUnitMoved = 1
  1248.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1249.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1250.                                                                                                                                 iSoDUnitMoved = 1
  1251.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1252.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1253.                                                                                                         iSoDUnitMoved = 1                                                                                              
  1254.                                                                         if pMayMoveUnit.getY() > 11:
  1255.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1256.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1257.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() - 1)
  1258.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1259.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1260.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1261.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1262.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1263.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1264.                                                                                                                         iSoDUnitMoved = 1
  1265.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1266.                                                                                                                                 iSoDUnitMoved = 1
  1267.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1268.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1269.                                                                                                                                 iSoDUnitMoved = 1
  1270.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1271.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1272.                                                                                                         iSoDUnitMoved = 1
  1273.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1274.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() - 1)
  1275.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1276.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1277.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1278.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1279.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1280.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1281.                                                                                                                         iSoDUnitMoved = 1
  1282.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1283.                                                                                                                                 iSoDUnitMoved = 1
  1284.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1285.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1286.                                                                                                                                 iSoDUnitMoved = 1
  1287.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1288.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1289.                                                                                                         iSoDUnitMoved = 1
  1290.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1291.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() - 1)
  1292.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1293.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1294.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1295.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1296.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1297.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1298.                                                                                                                         iSoDUnitMoved = 1
  1299.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1300.                                                                                                                                 iSoDUnitMoved = 1
  1301.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1302.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1303.                                                                                                                                 iSoDUnitMoved = 1
  1304.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1305.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1306.                                                                                                         iSoDUnitMoved = 1
  1307.                                                                         if pMayMoveUnit.getY() == 11:
  1308.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1309.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1310.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY())
  1311.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1312.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1313.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1314.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1315.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1316.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1317.                                                                                                                         iSoDUnitMoved = 1
  1318.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1319.                                                                                                                                 iSoDUnitMoved = 1
  1320.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1321.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1322.                                                                                                                                 iSoDUnitMoved = 1
  1323.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1324.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1325.                                                                                                         iSoDUnitMoved = 1
  1326.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1327.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY())
  1328.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1329.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1330.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1331.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1332.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1333.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1334.                                                                                                                         iSoDUnitMoved = 1
  1335.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1336.                                                                                                                                 iSoDUnitMoved = 1
  1337.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1338.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1339.                                                                                                                                 iSoDUnitMoved = 1
  1340.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1341.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1342.                                                                                                         iSoDUnitMoved = 1
  1343.                                         if pGoodSofDPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES'):
  1344.                                                 pySofD = PyPlayer(iGoodSofDPlayer)
  1345.                                                 if pGoodSofDPlayer.getNumUnits() > 0:
  1346.                                                         for pMayMoveUnit in pySofD.getUnitList():
  1347.                                                                 if pMayMoveUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SofD')):
  1348.                                                                         iSoDUnitMoved = 0
  1349.                                                                         if pMayMoveUnit.getY() < 11:
  1350.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1351.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1352.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() + 1)
  1353.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1354.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1355.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1356.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1357.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1358.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1359.                                                                                                                         iSoDUnitMoved = 1
  1360.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1361.                                                                                                                                 iSoDUnitMoved = 1
  1362.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1363.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1364.                                                                                                                                 iSoDUnitMoved = 1
  1365.                                                                                                 if pPossiblePlot.getNumUnits() == 0:
  1366.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1367.                                                                                                         iSoDUnitMoved = 1                                                                                      
  1368.                                                                                                 #War is done by team so either don't keep moving if another unit is there or find the Elohim team and find the other unit's team
  1369.                                                                                                 #Elohim team ID is always 0 because *I THINK* it is the human player (maybe team 0 is the barbarian player?)
  1370.                                                                                                 #War with Elohim is used as a proxy for war with any of the other good civs
  1371.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1372.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() + 1)
  1373.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1374.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1375.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1376.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1377.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1378.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1379.                                                                                                                         iSoDUnitMoved = 1
  1380.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1381.                                                                                                                                 iSoDUnitMoved = 1
  1382.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1383.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1384.                                                                                                                                 iSoDUnitMoved = 1
  1385.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1386.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1387.                                                                                                         iSoDUnitMoved = 1
  1388.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1389.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() + 1)
  1390.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1391.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1392.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1393.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1394.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1395.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1396.                                                                                                                         iSoDUnitMoved = 1
  1397.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1398.                                                                                                                                 iSoDUnitMoved = 1
  1399.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1400.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1401.                                                                                                                                 iSoDUnitMoved = 1
  1402.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1403.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1404.                                                                                                         iSoDUnitMoved = 1                                                                                              
  1405.                                                                         if pMayMoveUnit.getY() > 11:
  1406.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1407.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1408.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() - 1)
  1409.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1410.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1411.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1412.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1413.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1414.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1415.                                                                                                                         iSoDUnitMoved = 1
  1416.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1417.                                                                                                                                 iSoDUnitMoved = 1
  1418.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1419.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1420.                                                                                                                                 iSoDUnitMoved = 1
  1421.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1422.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1423.                                                                                                         iSoDUnitMoved = 1
  1424.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1425.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() - 1)
  1426.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1427.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1428.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1429.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1430.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1431.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1432.                                                                                                                         iSoDUnitMoved = 1
  1433.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1434.                                                                                                                                 iSoDUnitMoved = 1
  1435.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1436.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1437.                                                                                                                                 iSoDUnitMoved = 1
  1438.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1439.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1440.                                                                                                         iSoDUnitMoved = 1
  1441.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1442.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() - 1)
  1443.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1444.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1445.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1446.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1447.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1448.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1449.                                                                                                                         iSoDUnitMoved = 1
  1450.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1451.                                                                                                                                 iSoDUnitMoved = 1
  1452.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1453.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1454.                                                                                                                                 iSoDUnitMoved = 1
  1455.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1456.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1457.                                                                                                         iSoDUnitMoved = 1
  1458.                                                                         if pMayMoveUnit.getY() == 11:
  1459.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1460.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1461.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY())
  1462.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1463.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1464.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1465.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1466.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1467.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1468.                                                                                                                         iSoDUnitMoved = 1
  1469.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1470.                                                                                                                                 iSoDUnitMoved = 1
  1471.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1472.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1473.                                                                                                                                 iSoDUnitMoved = 1
  1474.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1475.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1476.                                                                                                         iSoDUnitMoved = 1
  1477.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1478.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY())
  1479.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1480.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1481.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1482.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1483.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1484.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1485.                                                                                                                         iSoDUnitMoved = 1
  1486.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1487.                                                                                                                                 iSoDUnitMoved = 1
  1488.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1489.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1490.                                                                                                                                 iSoDUnitMoved = 1
  1491.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1492.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1493.                                                                                                         iSoDUnitMoved = 1
  1494.                                         if pGoodSofDPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  1495.                                                 pySofD = PyPlayer(iGoodSofDPlayer)
  1496.                                                 if pGoodSofDPlayer.getNumUnits() > 0:
  1497.                                                         for pMayMoveUnit in pySofD.getUnitList():
  1498.                                                                 if pMayMoveUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SofD')):
  1499.                                                                         iSoDUnitMoved = 0
  1500.                                                                         if pMayMoveUnit.getY() < 11:
  1501.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1502.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1503.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() + 1)
  1504.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1505.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1506.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1507.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1508.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1509.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1510.                                                                                                                         iSoDUnitMoved = 1
  1511.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1512.                                                                                                                                 iSoDUnitMoved = 1
  1513.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1514.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1515.                                                                                                                                 iSoDUnitMoved = 1
  1516.                                                                                                 if pPossiblePlot.getNumUnits() == 0:
  1517.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1518.                                                                                                         iSoDUnitMoved = 1                                                                                      
  1519.                                                                                                 #War is done by team so either don't keep moving if another unit is there or find the Elohim team and find the other unit's team
  1520.                                                                                                 #Elohim team ID is always 0 because it is the human player
  1521.                                                                                                 #War with Elohim is used as a proxy for war with any of the other good civs
  1522.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1523.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() + 1)
  1524.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1525.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1526.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1527.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1528.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1529.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1530.                                                                                                                         iSoDUnitMoved = 1
  1531.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1532.                                                                                                                                 iSoDUnitMoved = 1
  1533.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1534.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1535.                                                                                                                                 iSoDUnitMoved = 1
  1536.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1537.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1538.                                                                                                         iSoDUnitMoved = 1
  1539.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1540.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() + 1)
  1541.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1542.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1543.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1544.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1545.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1546.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1547.                                                                                                                         iSoDUnitMoved = 1
  1548.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1549.                                                                                                                                 iSoDUnitMoved = 1
  1550.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1551.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1552.                                                                                                                                 iSoDUnitMoved = 1
  1553.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1554.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1555.                                                                                                         iSoDUnitMoved = 1                                                                                              
  1556.                                                                         if pMayMoveUnit.getY() > 11:
  1557.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1558.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1559.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() - 1)
  1560.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1561.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1562.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1563.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1564.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1565.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1566.                                                                                                                         iSoDUnitMoved = 1
  1567.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1568.                                                                                                                                 iSoDUnitMoved = 1
  1569.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1570.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1571.                                                                                                                                 iSoDUnitMoved = 1
  1572.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1573.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1574.                                                                                                         iSoDUnitMoved = 1
  1575.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1576.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() - 1)
  1577.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1578.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1579.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1580.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1581.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1582.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1583.                                                                                                                         iSoDUnitMoved = 1
  1584.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1585.                                                                                                                                 iSoDUnitMoved = 1
  1586.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1587.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1588.                                                                                                                                 iSoDUnitMoved = 1
  1589.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1590.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1591.                                                                                                         iSoDUnitMoved = 1
  1592.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1593.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() - 1)
  1594.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1595.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1596.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1597.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1598.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1599.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1600.                                                                                                                         iSoDUnitMoved = 1
  1601.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1602.                                                                                                                                 iSoDUnitMoved = 1
  1603.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1604.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1605.                                                                                                                                 iSoDUnitMoved = 1
  1606.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1607.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1608.                                                                                                         iSoDUnitMoved = 1
  1609.                                                                         if pMayMoveUnit.getY() == 11:
  1610.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1611.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1612.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY())
  1613.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1614.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1615.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1616.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1617.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1618.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1619.                                                                                                                         iSoDUnitMoved = 1
  1620.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1621.                                                                                                                                 iSoDUnitMoved = 1
  1622.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1623.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1624.                                                                                                                                 iSoDUnitMoved = 1
  1625.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1626.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1627.                                                                                                         iSoDUnitMoved = 1
  1628.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1629.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY())
  1630.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1631.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1632.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1633.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1634.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1635.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1636.                                                                                                                         iSoDUnitMoved = 1
  1637.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1638.                                                                                                                                 iSoDUnitMoved = 1
  1639.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1640.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1641.                                                                                                                                 iSoDUnitMoved = 1
  1642.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1643.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1644.                                                                                                         iSoDUnitMoved = 1
  1645.                                         if pGoodSofDPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LUCHUIRP'):
  1646.                                                 pySofD = PyPlayer(iGoodSofDPlayer)
  1647.                                                 if pGoodSofDPlayer.getNumUnits() > 0:
  1648.                                                         for pMayMoveUnit in pySofD.getUnitList():
  1649.                                                                 if pMayMoveUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SofD')):
  1650.                                                                         iSoDUnitMoved = 0
  1651.                                                                         if pMayMoveUnit.getY() < 11:
  1652.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1653.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1654.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() + 1)
  1655.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1656.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1657.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1658.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1659.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1660.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1661.                                                                                                                         iSoDUnitMoved = 1
  1662.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1663.                                                                                                                                 iSoDUnitMoved = 1
  1664.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1665.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1666.                                                                                                                                 iSoDUnitMoved = 1
  1667.                                                                                                 if pPossiblePlot.getNumUnits() == 0:
  1668.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1669.                                                                                                         iSoDUnitMoved = 1                                                                                      
  1670.                                                                                                 #War is done by team so either don't keep moving if another unit is there or find the Elohim team and find the other unit's team
  1671.                                                                                                 #Elohim team ID is always 0 because it is the human player
  1672.                                                                                                 #War with Elohim is used as a proxy for war with any of the other good civs
  1673.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1674.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() + 1)
  1675.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1676.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1677.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1678.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1679.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1680.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1681.                                                                                                                         iSoDUnitMoved = 1
  1682.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1683.                                                                                                                                 iSoDUnitMoved = 1
  1684.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1685.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1686.                                                                                                                                 iSoDUnitMoved = 1
  1687.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1688.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1689.                                                                                                         iSoDUnitMoved = 1
  1690.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1691.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() + 1)
  1692.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1693.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1694.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1695.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1696.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1697.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1698.                                                                                                                         iSoDUnitMoved = 1
  1699.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1700.                                                                                                                                 iSoDUnitMoved = 1
  1701.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1702.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1703.                                                                                                                                 iSoDUnitMoved = 1
  1704.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1705.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1706.                                                                                                         iSoDUnitMoved = 1                                                                                              
  1707.                                                                         if pMayMoveUnit.getY() > 11:
  1708.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1709.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1710.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY() - 1)
  1711.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1712.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1713.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1714.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1715.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1716.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1717.                                                                                                                         iSoDUnitMoved = 1
  1718.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1719.                                                                                                                                 iSoDUnitMoved = 1
  1720.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1721.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1722.                                                                                                                                 iSoDUnitMoved = 1
  1723.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1724.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1725.                                                                                                         iSoDUnitMoved = 1
  1726.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1727.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY() - 1)
  1728.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1729.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1730.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1731.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1732.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1733.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1734.                                                                                                                         iSoDUnitMoved = 1
  1735.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1736.                                                                                                                                 iSoDUnitMoved = 1
  1737.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1738.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1739.                                                                                                                                 iSoDUnitMoved = 1
  1740.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1741.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1742.                                                                                                         iSoDUnitMoved = 1
  1743.                                                                                 if pMayMoveUnit.getX() == 59 and iSoDUnitMoved == 0:
  1744.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX(), pMayMoveUnit.getY() - 1)
  1745.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1746.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1747.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1748.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1749.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1750.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1751.                                                                                                                         iSoDUnitMoved = 1
  1752.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1753.                                                                                                                                 iSoDUnitMoved = 1
  1754.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1755.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1756.                                                                                                                                 iSoDUnitMoved = 1
  1757.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1758.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1759.                                                                                                         iSoDUnitMoved = 1
  1760.                                                                         if pMayMoveUnit.getY() == 11:
  1761.                                                                                 pMayMoveUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1762.                                                                                 if pMayMoveUnit.getX() < 59 and iSoDUnitMoved == 0:
  1763.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() + 1, pMayMoveUnit.getY())
  1764.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1765.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1766.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1767.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1768.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1769.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1770.                                                                                                                         iSoDUnitMoved = 1
  1771.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1772.                                                                                                                                 iSoDUnitMoved = 1
  1773.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1774.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1775.                                                                                                                                 iSoDUnitMoved = 1
  1776.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1777.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)      
  1778.                                                                                                         iSoDUnitMoved = 1
  1779.                                                                                 if pMayMoveUnit.getX() > 59 and iSoDUnitMoved == 0:
  1780.                                                                                         pPossiblePlot = CyMap().plot(pMayMoveUnit.getX() - 1, pMayMoveUnit.getY())
  1781.                                                                                         if pMayMoveUnit.canMoveInto(pPossiblePlot, False, True, False):
  1782.                                                                                                 if pPossiblePlot.getNumUnits() > 0:
  1783.                                                                                                         for iPossibleEnemy in range(pPossiblePlot.getNumUnits()):
  1784.                                                                                                                 pOtherUnitOwner = pPossiblePlot.getUnit(iPossibleEnemy).getOwner()
  1785.                                                                                                                 iOtherUnitTeam = gc.getTeam(pOtherUnitOwner)
  1786.                                                                                                                 if iOtherUnitTeam.isBarbarian() == True:
  1787.                                                                                                                         iSoDUnitMoved = 1
  1788.                                                                                                                 if iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1789.                                                                                                                                 iSoDUnitMoved = 1
  1790.                                                                                                                 if not iOtherUnitTeam.isAtWar(0) and iSoDUnitMoved == 0:
  1791.                                                                                                                                 pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1792.                                                                                                                                 iSoDUnitMoved = 1
  1793.                                                                                                 if pPossiblePlot.getNumUnits() == 0:                                                                                   
  1794.                                                                                                         pMayMoveUnit.setXY(pPossiblePlot.getX(), pPossiblePlot.getY(), False, True, True)
  1795.                                                                                                         iSoDUnitMoved = 1
  1796.                                        
  1797.                        
  1798.                 #The starting and finishing positions need to be changed in def onUnitCreated, def onBeginPlayerTurn, the Bane Divine section, the move to marshalling point above in this section and here.
  1799.                 #The AI is given the HELD promotion in def onBeginPlayerTurn otherwise they move off the tile before being given the promotion
  1800.                 #This code should give all units in tile(iOldX,iOldY) the HELD promotion so that they can't move anywhere.
  1801.                 #iTargetX and iTargetY give the coordinates of the tile that the unit stack is moving into
  1802.                 #If it is after turn 30 then move units from the marshalling tile towards the target tile
  1803.                 iTargetX = 16
  1804.                 iTargetY = 10
  1805.                 pTargetPlot = CyMap().plot(iTargetX,iTargetY)
  1806.                
  1807.                 #onBeginPlayerTurn is giving units in the marshalling point the HELD promotion which may be unnecessary??
  1808.                 if iGameTurn < 60:
  1809.                         iOldX = 59
  1810.                         iOldY = 11
  1811.                         pOldPlot = CyMap().plot(iOldX,iOldY)
  1812.                         for i in range(pOldPlot.getNumUnits()):
  1813.                                 pUnit = pOldPlot.getUnit(i)
  1814.                                 pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HELD'), True)
  1815.                         #Remember the x and y values between turns 9 and 10
  1816.                         myPickle = [iOldX, iOldY]
  1817.                         serializedMyPickle = pickle.dumps(myPickle)
  1818.                         BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  1819.  
  1820.                 #Make sure in the final version that the target is roughly W of the marshalling point (takes about 45 turns from marshalling point to Sheaim capital)
  1821.                 #Check that it only avoids the tile if it's NOT a friendly unit in the tile (invisible friendly units could allow you to move into enemy units though)
  1822.                 if iGameTurn >= 60 and iGameTurn <= 120:
  1823.                         #Load x and y values
  1824.                         serializedMyPickle = BugData.getTable("MY_TABLE").data
  1825.                         myPickle = pickle.loads(serializedMyPickle)
  1826.                         iOldX = myPickle[0]
  1827.                         iOldY = myPickle[1]
  1828.                         pOldPlot = CyMap().plot(iOldX, iOldY)
  1829.                         UnitsMoved = -1
  1830.                        
  1831.                        
  1832.                         if iOldY == iTargetY and iOldX > iTargetX:
  1833.                                 #First choice is to move W if possible
  1834.                                 if UnitsMoved == -1:
  1835.                                         iNewX = iOldX - 1
  1836.                                         iNewY = iOldY
  1837.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  1838.                                         if pNewPlot.isNone() == False:
  1839.                                                 #Option 1 - pNewPlot is empty
  1840.                                                 if pNewPlot.getNumUnits() == 0:
  1841.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1842.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  1843.                                                                         pUnit = pOldPlot.getUnit(i)
  1844.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  1845.                                                                 UnitsMoved = 1
  1846.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  1847.                                                 #Won't enter the loop if no units in the tile
  1848.                                                 #Could use isAtWar(0) instead which would have the advantage of not moving into Luchuirp (if they have declared war already)
  1849.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  1850.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  1851.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  1852.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  1853.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1854.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  1855.                                                                                 pUnit = pOldPlot.getUnit(i)
  1856.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  1857.                                                                         UnitsMoved = 1
  1858.                                
  1859.                                 #Second choice is to move NW if possible
  1860.                                 if UnitsMoved == -1:
  1861.                                         iNewY = iNewY + 1
  1862.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  1863.                                         if pNewPlot.isNone() == False:
  1864.                                                 #Option 1 - pNewPlot is empty
  1865.                                                 if pNewPlot.getNumUnits() == 0:
  1866.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1867.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  1868.                                                                         pUnit = pOldPlot.getUnit(i)
  1869.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  1870.                                                                 UnitsMoved = 1
  1871.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  1872.                                                 #Won't enter the loop if no units in the tile
  1873.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  1874.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  1875.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  1876.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  1877.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1878.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  1879.                                                                                 pUnit = pOldPlot.getUnit(i)
  1880.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  1881.                                                                         UnitsMoved = 1
  1882.                                                                
  1883.                                 #Third choice is to move SW if possible
  1884.                                 if UnitsMoved == -1:
  1885.                                         iNewY = iNewY - 2
  1886.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  1887.                                         if pNewPlot.isNone() == False:
  1888.                                                 #Option 1 - pNewPlot is empty
  1889.                                                 if pNewPlot.getNumUnits() == 0:
  1890.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1891.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  1892.                                                                         pUnit = pOldPlot.getUnit(i)
  1893.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  1894.                                                                 UnitsMoved = 1
  1895.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  1896.                                                 #Won't enter the loop if no units in the tile
  1897.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  1898.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  1899.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  1900.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  1901.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1902.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  1903.                                                                                 pUnit = pOldPlot.getUnit(i)
  1904.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  1905.                                                                         UnitsMoved = 1
  1906.                                                                
  1907.                                 #Fourth choice is to stay in the same tile
  1908.                                 if UnitsMoved == -1:
  1909.                                         iNewY = iNewY + 1
  1910.                                         iNewX = iNewX + 1
  1911.                                         pNewPlot = CyMap().plot(iNewX,iNewY)
  1912.                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  1913.                                                 pUnit = pOldPlot.getUnit(i)
  1914.                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  1915.                                         UnitsMoved = 1
  1916.                                
  1917.                                 #Remember the x and y values between turns
  1918.                                 iOldX = iNewX
  1919.                                 iOldY = iNewY
  1920.                                 myPickle = [iOldX, iOldY]
  1921.                                 serializedMyPickle = pickle.dumps(myPickle)
  1922.                                 BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  1923.  
  1924.                        
  1925.                         if iOldY > iTargetY and iOldY < iTargetY + 5 and iOldX > iTargetX:
  1926.                                 #First choice is to move SW if possible
  1927.                                 if UnitsMoved == -1:
  1928.                                         iNewX = iOldX - 1
  1929.                                         iNewY = iOldY - 1
  1930.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  1931.                                         if pNewPlot.isNone() == False:
  1932.                                                 #Option 1 - pNewPlot is empty
  1933.                                                 if pNewPlot.getNumUnits() == 0:
  1934.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1935.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  1936.                                                                         pUnit = pOldPlot.getUnit(i)
  1937.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  1938.                                                                 UnitsMoved = 1
  1939.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  1940.                                                 #Won't enter the loop if no units in the tile
  1941.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  1942.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  1943.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  1944.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  1945.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1946.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  1947.                                                                                 pUnit = pOldPlot.getUnit(i)
  1948.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  1949.                                                                         UnitsMoved = 1
  1950.                                
  1951.                                 #Second choice is to move W if possible
  1952.                                 if UnitsMoved == -1:
  1953.                                         iNewY = iNewY + 1
  1954.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  1955.                                         if pNewPlot.isNone() == False:
  1956.                                                 #Option 1 - pNewPlot is empty
  1957.                                                 if pNewPlot.getNumUnits() == 0:
  1958.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1959.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  1960.                                                                         pUnit = pOldPlot.getUnit(i)
  1961.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  1962.                                                                 UnitsMoved = 1
  1963.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  1964.                                                 #Won't enter the loop if no units in the tile
  1965.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  1966.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  1967.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  1968.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  1969.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1970.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  1971.                                                                                 pUnit = pOldPlot.getUnit(i)
  1972.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  1973.                                                                         UnitsMoved = 1
  1974.                                                                
  1975.                                 #Third choice is to move NW if possible
  1976.                                 if UnitsMoved == -1:
  1977.                                         iNewY = iNewY + 1
  1978.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  1979.                                         if pNewPlot.isNone() == False:
  1980.                                                 #Option 1 - pNewPlot is empty
  1981.                                                 if pNewPlot.getNumUnits() == 0:
  1982.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1983.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  1984.                                                                         pUnit = pOldPlot.getUnit(i)
  1985.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  1986.                                                                 UnitsMoved = 1
  1987.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  1988.                                                 #Won't enter the loop if no units in the tile
  1989.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  1990.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  1991.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  1992.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  1993.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  1994.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  1995.                                                                                 pUnit = pOldPlot.getUnit(i)
  1996.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  1997.                                                                         UnitsMoved = 1
  1998.                                                                
  1999.                                 #Fourth choice is to stay in the same tile
  2000.                                 if UnitsMoved == -1:
  2001.                                         iNewY = iNewY - 1
  2002.                                         iNewX = iNewX + 1
  2003.                                         pNewPlot = CyMap().plot(iNewX,iNewY)
  2004.                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2005.                                                 pUnit = pOldPlot.getUnit(i)
  2006.                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2007.                                         UnitsMoved = 1
  2008.                                
  2009.                                 #Remember the x and y values between turns
  2010.                                 iOldX = iNewX
  2011.                                 iOldY = iNewY
  2012.                                 myPickle = [iOldX, iOldY]
  2013.                                 serializedMyPickle = pickle.dumps(myPickle)
  2014.                                 BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  2015.  
  2016.                                
  2017.                         if iOldY < iTargetY and iOldY > iTargetY - 5 and iOldX > iTargetX:
  2018.                                 #First choice is to move NW if possible
  2019.                                 if UnitsMoved == -1:
  2020.                                         iNewX = iOldX - 1
  2021.                                         iNewY = iOldY + 1
  2022.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2023.                                         if pNewPlot.isNone() == False:
  2024.                                                 #Option 1 - pNewPlot is empty
  2025.                                                 if pNewPlot.getNumUnits() == 0:
  2026.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2027.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2028.                                                                         pUnit = pOldPlot.getUnit(i)
  2029.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2030.                                                                 UnitsMoved = 1
  2031.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2032.                                                 #Won't enter the loop if no units in the tile
  2033.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2034.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2035.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2036.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  2037.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2038.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2039.                                                                                 pUnit = pOldPlot.getUnit(i)
  2040.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2041.                                                                         UnitsMoved = 1
  2042.                                
  2043.                                 #Second choice is to move W if possible
  2044.                                 if UnitsMoved == -1:
  2045.                                         iNewY = iNewY - 1
  2046.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2047.                                         if pNewPlot.isNone() == False:
  2048.                                                 #Option 1 - pNewPlot is empty
  2049.                                                 if pNewPlot.getNumUnits() == 0:
  2050.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2051.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2052.                                                                         pUnit = pOldPlot.getUnit(i)
  2053.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2054.                                                                 UnitsMoved = 1
  2055.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2056.                                                 #Won't enter the loop if no units in the tile
  2057.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2058.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2059.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2060.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  2061.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2062.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2063.                                                                                 pUnit = pOldPlot.getUnit(i)
  2064.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2065.                                                                         UnitsMoved = 1
  2066.                                                                
  2067.                                 #Third choice is to move SW if possible
  2068.                                 if UnitsMoved == -1:
  2069.                                         iNewY = iNewY - 1
  2070.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2071.                                         if pNewPlot.isNone() == False:
  2072.                                                 #Option 1 - pNewPlot is empty
  2073.                                                 if pNewPlot.getNumUnits() == 0:
  2074.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2075.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2076.                                                                         pUnit = pOldPlot.getUnit(i)
  2077.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2078.                                                                 UnitsMoved = 1
  2079.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2080.                                                 #Won't enter the loop if no units in the tile
  2081.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2082.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2083.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2084.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  2085.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2086.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2087.                                                                                 pUnit = pOldPlot.getUnit(i)
  2088.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2089.                                                                         UnitsMoved = 1
  2090.                                                                
  2091.                                 #Fourth choice is to stay in the same tile
  2092.                                 if UnitsMoved == -1:
  2093.                                         iNewY = iNewY + 1
  2094.                                         iNewX = iNewX + 1
  2095.                                         pNewPlot = CyMap().plot(iNewX,iNewY)
  2096.                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2097.                                                 pUnit = pOldPlot.getUnit(i)
  2098.                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2099.                                         UnitsMoved = 1
  2100.                                
  2101.                                 #Remember the x and y values between turns
  2102.                                 iOldX = iNewX
  2103.                                 iOldY = iNewY
  2104.                                 myPickle = [iOldX, iOldY]
  2105.                                 serializedMyPickle = pickle.dumps(myPickle)
  2106.                                 BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  2107.                                
  2108.                                
  2109.                         if iOldY >= iTargetY + 5 and iOldX > iTargetX:
  2110.                                 #First choice is to move SW if possible
  2111.                                 if UnitsMoved == -1:
  2112.                                         iNewX = iOldX - 1
  2113.                                         iNewY = iOldY - 1
  2114.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2115.                                         if pNewPlot.isNone() == False:
  2116.                                                 #Option 1 - pNewPlot is empty
  2117.                                                 if pNewPlot.getNumUnits() == 0:
  2118.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2119.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2120.                                                                         pUnit = pOldPlot.getUnit(i)
  2121.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2122.                                                                 UnitsMoved = 1
  2123.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2124.                                                 #Won't enter the loop if no units in the tile
  2125.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2126.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2127.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2128.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  2129.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2130.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2131.                                                                                 pUnit = pOldPlot.getUnit(i)
  2132.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2133.                                                                         UnitsMoved = 1
  2134.                                                                                                
  2135.                                 #Second choice is to stay in the same tile
  2136.                                 if UnitsMoved == -1:
  2137.                                         iNewY = iNewY + 1
  2138.                                         iNewX = iNewX + 1
  2139.                                         pNewPlot = CyMap().plot(iNewX,iNewY)
  2140.                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2141.                                                 pUnit = pOldPlot.getUnit(i)
  2142.                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2143.                                         UnitsMoved = 1
  2144.                                
  2145.                                 #Remember the x and y values between turns
  2146.                                 iOldX = iNewX
  2147.                                 iOldY = iNewY
  2148.                                 myPickle = [iOldX, iOldY]
  2149.                                 serializedMyPickle = pickle.dumps(myPickle)
  2150.                                 BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  2151.                                
  2152.  
  2153.                         if iOldY <= iTargetY - 5 and iOldX > iTargetX:
  2154.                                 #First choice is to move NW if possible
  2155.                                 if UnitsMoved == -1:
  2156.                                         iNewX = iOldX - 1
  2157.                                         iNewY = iOldY + 1
  2158.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2159.                                         if pNewPlot.isNone() == False:
  2160.                                                 #Option 1 - pNewPlot is empty
  2161.                                                 if pNewPlot.getNumUnits() == 0:
  2162.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2163.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2164.                                                                         pUnit = pOldPlot.getUnit(i)
  2165.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2166.                                                                 UnitsMoved = 1
  2167.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2168.                                                 #Won't enter the loop if no units in the tile
  2169.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2170.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2171.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2172.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  2173.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2174.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2175.                                                                                 pUnit = pOldPlot.getUnit(i)
  2176.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2177.                                                                         UnitsMoved = 1
  2178.                                                                
  2179.                                 #Second choice is to stay in the same tile
  2180.                                 if UnitsMoved == -1:
  2181.                                         iNewY = iNewY -1
  2182.                                         iNewX = iNewX + 1
  2183.                                         pNewPlot = CyMap().plot(iNewX,iNewY)
  2184.                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2185.                                                 pUnit = pOldPlot.getUnit(i)
  2186.                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2187.                                         UnitsMoved = 1
  2188.                                
  2189.                                 #Remember the x and y values between turns
  2190.                                 iOldX = iNewX
  2191.                                 iOldY = iNewY
  2192.                                 myPickle = [iOldX, iOldY]
  2193.                                 serializedMyPickle = pickle.dumps(myPickle)
  2194.                                 BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  2195.                                
  2196.                        
  2197.                         if iOldY < iTargetY and iOldY > iTargetY - 5 and iOldX == iTargetX:
  2198.                                 #First choice is to move N if possible
  2199.                                 if UnitsMoved == -1:
  2200.                                         iNewX = iOldX
  2201.                                         iNewY = iOldY + 1
  2202.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2203.                                         if pNewPlot.isNone() == False:
  2204.                                                 #Option 1 - pNewPlot is empty
  2205.                                                 if pNewPlot.getNumUnits() == 0:
  2206.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2207.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2208.                                                                         pUnit = pOldPlot.getUnit(i)
  2209.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2210.                                                                 UnitsMoved = 1
  2211.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2212.                                                 #Won't enter the loop if no units in the tile
  2213.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2214.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2215.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2216.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  2217.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2218.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2219.                                                                                 pUnit = pOldPlot.getUnit(i)
  2220.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2221.                                                                         UnitsMoved = 1
  2222.                        
  2223.                                 #Second choice is to stay in the same tile
  2224.                                 if UnitsMoved == -1:
  2225.                                         iNewY = iNewY - 1
  2226.                                         iNewX = iNewX
  2227.                                         pNewPlot = CyMap().plot(iNewX,iNewY)
  2228.                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2229.                                                 pUnit = pOldPlot.getUnit(i)
  2230.                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2231.                                         UnitsMoved = 1
  2232.                                
  2233.                                 #Remember the x and y values between turns
  2234.                                 iOldX = iNewX
  2235.                                 iOldY = iNewY
  2236.                                 myPickle = [iOldX, iOldY]
  2237.                                 serializedMyPickle = pickle.dumps(myPickle)
  2238.                                 BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  2239.                                
  2240.                         if iOldY > iTargetY and iOldY < iTargetY + 5 and iOldX == iTargetX:
  2241.                                 #First choice is to move S if possible
  2242.                                 if UnitsMoved == -1:
  2243.                                         iNewX = iOldX
  2244.                                         iNewY = iOldY - 1
  2245.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2246.                                         if pNewPlot.isNone() == False:
  2247.                                                 #Option 1 - pNewPlot is empty
  2248.                                                 if pNewPlot.getNumUnits() == 0:
  2249.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2250.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2251.                                                                         pUnit = pOldPlot.getUnit(i)
  2252.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2253.                                                                 UnitsMoved = 1
  2254.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2255.                                                 #Won't enter the loop if no units in the tile
  2256.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2257.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2258.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2259.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BANNOR') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ELOHIM') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES') or pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'):
  2260.                                                                 if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2261.                                                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2262.                                                                                 pUnit = pOldPlot.getUnit(i)
  2263.                                                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2264.                                                                         UnitsMoved = 1
  2265.                        
  2266.                                 #Second choice is to stay in the same tile
  2267.                                 if UnitsMoved == -1:
  2268.                                         iNewY = iNewY + 1
  2269.                                         iNewX = iNewX
  2270.                                         pNewPlot = CyMap().plot(iNewX,iNewY)
  2271.                                         for i in range(pOldPlot.getNumUnits(), -1, -1):
  2272.                                                 pUnit = pOldPlot.getUnit(i)
  2273.                                                 pUnit.setXY(iNewX, iNewY, False, True, True)
  2274.                                         UnitsMoved = 1
  2275.                                
  2276.                                 #Remember the x and y values between turns
  2277.                                 iOldX = iNewX
  2278.                                 iOldY = iNewY
  2279.                                 myPickle = [iOldX, iOldY]
  2280.                                 serializedMyPickle = pickle.dumps(myPickle)
  2281.                                 BugData.getTable("MY_TABLE").setData(serializedMyPickle)
  2282.                                                                
  2283.                         if iOldY <= iTargetY - 5 and iOldX == iTargetX:
  2284.                                 #First choice is to move N if possible
  2285.                                 if UnitsMoved == -1:
  2286.                                         iNewX = iOldX
  2287.                                         iNewY = iOldY + 1
  2288.                                         pNewPlot = CyMap().plot(iNewX,iNewY)                   
  2289.                                         if pNewPlot.isNone() == False:
  2290.                                                 #Option 1 - pNewPlot is empty
  2291.                                                 if pNewPlot.getNumUnits() == 0:
  2292.                                                         if (pNewPlot.isWater() == False and pNewPlot.isPeak() == False and pNewPlot.isCity() == False):
  2293.                                                                 for i in range(pOldPlot.getNumUnits(), -1, -1):
  2294.                                                                         pUnit = pOldPlot.getUnit(i)
  2295.                                                                         pUnit.setXY(iNewX, iNewY, False, True, True)
  2296.                                                                 UnitsMoved = 1
  2297.                                                 #Option 2 - pNewPlot has friendly (not including Luchuirp units) units in it
  2298.                                                 #Won't enter the loop if no units in the tile
  2299.                                                 for iBlockingUnits in range(pNewPlot.getNumUnits()):
  2300.                                                         pPossibleGoodUnit = pNewPlot.getUnit(iBlockingUnits)
  2301.                                                         pPossibleGoodPlayer = gc.getPlayer(pPossibleGoodUnit.getOwner())
  2302.                                                         if pPossibleGoodPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BA