Version 2.6 discussion

Another issue is that when you get a tech you have the pop-up screen twice!!
Few inquisition related python events were moved from CvEventManager to BUGEventManager and I think onTechAcquired was one of them - I'll have to check that I included correct BUGEventManager.py file to the newest patch - I was flipping files constantly when I was testing for that 'waiting for civs' bug.
 
Hi,

just tried a solo 2.6beta 2 save with 2.6 beta 3.

It works!

Next week me and one friend will start a new multiplayer game.
Let's hope that the saves from 2.6 beta 3 will work with with the next beta versions and/or the 2.6 release.

We already started a game a didn't ecounter any critical/game breaking bugs whatsoever, but we just started :).
greetings

astrac

edit: installed 2.5 and 2.6beta3 (not over 2.6beta2). everything seems fine (for now ;) )
 
It should work alright when installing over 2.6beta2 and over 2.5 (tested it with 2.5). The DLL was updated too but glider had posted that saved games should still be compatible with new version.

I'll tweak scientific trait.

I did a trial installation over 2.6 beta 2 - the game loaded and ran my saved file, however when I researched I got two messages saying I'd researched and two voice overs to go with them. I also got the spinning world bug. I'm off to try it over 2.5 to see what happens.
 
I kind of like that 2 x tech research popup window, makes me feel like I'm researching one, getting one free. But maybe it should be done with in the end. :)
 
Yep, still getting the two tech popup, but haven't had a spinning world bug by installing 2.6 beta 3 over 2.5. I suspect that some of the things removed helped the spinning world - sure hope so! I can live with the popup, its trivial.
 
Version 2.6003 is giving me the no interface bug. 2.6002 was working fine before.

EDIT: I was able to fix this. It is an issue I have seen before in certain environments.

I turned on python exceptions and found the culprit line in BugUtil,py line 207 and charnged it to the following:

sys.stdout.write(str(message) + "\n")

For some reason, some environments (like mine apparently, and I am running Vista) python gets confused about the argument type of the variable. I had to force convert the "message" variable to string via the str() function to get it not to complain.
 
@Zappara

A clean install of 2.5 + 2.6Beta3 gave me no CTDs (so far). Hopefully the cause of the infinite loop was done with.

Expectantly, the double tech screen issue is still there. It should be however a trivial python track and fix. Make sure you also track the code where the event handler is hocked to the duplicate function otherwise it might cause a python exception.

I hope you may have a look at cavalry upgrade lines while you wrap-up the final 2.6. Specifically Mounted infantry seems to lack an upgrade when Heavy Cavalry gets obsoleted by Mailed Knights. I also think that Chariots shouldn't be upgradable to Horsemen. Besides making it short-living, Chariots are actually on the heavy side of mounted units. In the same sense Horsemen shouldn't upgrade to Mounted Infantry.
I'd like to suggest that Mounted Infantry gets bonus attack against melee units rather than archers. I know it might seem logical that heavy mounted units in general being armored would have advantage against archers but the fact is this should be defensive advantage. Light cavalry is more likely to have an advantage against archers being quicker and having better maneuver abilities.
In general I think heavy cavalry (I mean the whole line of units representing them) should be able to inflict collateral damage to a limited number of units (trampling effect as they charge through the enemy ranks). All mounted units should have intrinsic withdrawal chance with different percentages (light units have better chances, horse archers should have quite a high survival ratio maybe in exchange with nerfing their str a little, 8str seems a little too much).
 
Despite having the double tech thing, I'm having a fine time playing it. Although, again, thank you for removing the penalty from mining. :)

Wait, no you didn't. What's going on here....

Also, again, it's not even realistic. I'm tired of spamming holy religion buildings just to negate the penalty. :(
Remove the penalty until the ability for Strip Mining becomes available. :)

Oye, Level 6 for Heroic Epic? What does West Point require? level 10?
Level 5 maybe would have been fine...ugh.
:crazyeye: Agghhh

Also, please knock the prices down for upgrading units. It's so expensive that to do it to a moderate army requires the research slider to be set to 0 for about 30 turns...
 
Despite having the double tech thing, I'm having a fine time playing it. Although, again, thank you for removing the penalty from mining. :)

Wait, no you didn't. What's going on here....

Oye, Level 6 for Heroic Epic? What does West Point require? level 10?
Level 5 maybe would have been fine...ugh.
:crazyeye: Agghhh

The penalty for mines is now only for shaft mines ie the mines which have been worked until they improve and give you more hammers. They are not very pleasent places to work :)

I agree Level 6 seems a bit high for the Heroic Epic but then I hardly fight wars so it just becomes another building I don't get to build :)

I suppose I had better start getting those addons I made converted since 2.6 seems to be almost here:D
 
You can always train up a spy to level 6 very fast by conducting low-risk missions. That gives you access to those military buildings even if you're having a peaceful game.
 
I am afraid 2.6Beta3 seems (at least for me) less stable than the previous beta. I've got all kinds of freezes, infinite loops, and CTDs, all in one single game that is still in classical era. I think python files might need a thorough clean-up.
 
Version 2.6003 is giving me the no interface bug. 2.6002 was working fine before.

EDIT: I was able to fix this. It is an issue I have seen before in certain environments.

I turned on python exceptions and found the culprit line in BugUtil,py line 207 and charnged it to the following:

sys.stdout.write(str(message) + "\n")

For some reason, some environments (like mine apparently, and I am running Vista) python gets confused about the argument type of the variable. I had to force convert the "message" variable to string via the str() function to get it not to complain.
I think you should post this report to BUG team so they can fix this issue for BUG 4.0 which is in the works now. Let me know if you encounter other similar issues.

@Zappara
Expectantly, the double tech screen issue is still there. It should be however a trivial python track and fix. Make sure you also track the code where the event handler is hocked to the duplicate function otherwise it might cause a python exception
This was entirely my fault, didn't check close enough python code when I was moving code blocks. The issue has been fixed now. I still have to test on weekend if the Inquisitors do work correctly and then also see if I can fix the civic issue with corporation executives.
 
Version 2.6003 is giving me the no interface bug. 2.6002 was working fine before.

EDIT: I was able to fix this. It is an issue I have seen before in certain environments.

I turned on python exceptions and found the culprit line in BugUtil,py line 207 and charnged it to the following:

sys.stdout.write(str(message) + "\n")

For some reason, some environments (like mine apparently, and I am running Vista) python gets confused about the argument type of the variable. I had to force convert the "message" variable to string via the str() function to get it not to complain.

I'm having the same no interface problem now with the new beta3. I tried the above and it did not help. Note: I'm running XP Pro.

Anyone have ideas how to check where the problem is?

Back to beta 2 I guess :(
 
I'm having the same no interface problem now with the new beta3. I tried the above and it did not help. Note: I'm running XP Pro.

Anyone have ideas how to check where the problem is?

Back to beta 2 I guess :(
In Rise of Mankind -folder see the file CvAltroot.py and open it to notepad. Read the instructions there how to modify it and where to move it. This file was designed for BUG 3.6 to help those with 'no interface' problem.
 
In Rise of Mankind -folder see the file CvAltroot.py and open it to notepad. Read the instructions there how to modify it and where to move it. This file was designed for BUG 3.6 to help those with 'no interface' problem.

Sorry, that doesn't fix the problem. I have no interface with beta3, but with all other previous versions I'm okay. :(
 
2.6beta3 marathon/huge/noble

1. I am having CDTs, not as many as before attached is a log. They were not repeatable.

2. I have also got an icon size error see bmp file. I am not sure what building I was finishing so I also included the save. I think it may be one of the other civs doing the building. This error happens every time. Ie I can't play past this point.

Edit: the last time I had this problem was in another mod and it was the icon that shows up on the city bar in the main screen. So it is something I was about to build not what I completed. The Teutonic Sergant is the only new building/unit that will start next turn. It may be the source of the problem.

Yes, if I remove the Teutonic Sergeant from the build list the problem goes away.

3. For some reason King Richard's Crusade only ever produced one crusader! I did change religion from Amen-Ra to Christian after building it.

Edited to remove obsolete attachments
 
I just got the Bug, es it is early in the game I have no Idea why it happens.

I just conquered Alexander in this turn, so maybe its because of this.
(edit: without conquering Alex, just the same, so this doesn't seem to be the reason.)

Some of my specs:
Vista x64 SP1
8GB DDR2 RAM

Game:
Gigantic
Continents
Start: 6000BC
Monarch
Brennus
All "default" settings (Revolutions, etc...)
No Technology Brokering on.
edit2: RoM 2.5 full + 2.6003 beta
I have startet this game with the 2.6002 beta, seems to work fine wir beta 3 (except the bug of course).

edit3: just tried it out with beta 2, same problem. I noticed, that when the bug occurs, CIV produces no CPU load. RAM usage ist about 1.1 GB (thats normal with this map size).

Here is the save, just need to hit end turn:
 

Attachments

I toggled through the civ leaders and found the one who don't want to end the turn:
it Victoria (English).

So I ended the turn for her and the game went on.

What I noticed:

When I took over the settler + two other units were grouped and active.
Seemed to me like she dind't knew where to send them.

Victoria has just 1 city until now, so I don't think that it's a RevDCM issue.

And many, many units, most of them inside the city and all of them inside the cultural borders or lets say: iside the BFC of the city.
So maybe she wanted to send the settler outside the BFC, but somehow she can't.
edit: now I know this is wrong, there is also a scout outside which I dind't noticed.

Strange that she don't want to explore...

So I hope this will help to find the problem.

Greetings,

astrac

edit:
OK I did now some more tests, by switching to victoria, letting the active units wait for the next turn (until the "end turn" button was red) and switching back to Brennus.
Somehow Victoria does not want to end the turn, but activates some of the units again. I had to switch back few times to make her end the turn.
Aftre that the game went on, I could end the turn with Brennus and start the next turn.
Further noticing:
Vitctoria emerged from a Barb civ!
OK, I now went some Autosaves back, and the assumption, that she doesn't leave the BFC of her capital is wrong.

edit 2 (and the last one :)): OK, now I changed to victoria with the save where the bug occurs (she dind't made her moves yet), let all of her active units wait until next turn. Change to Brennus - turn ends automaticly, this time Victoria seems to manage it - at the end of the turn the same story again. So i guess she must be stuck somewhere...

Here an Autosave as far as it goes back. Victoria is allready there and seems to go conquering.
 

Attachments

On my test game I got the 'waiting for civs' bug and the python log at this point looked like this after I had switched to the civ which caused the bug - so problem occurs when minor civ turns into full civ:

Spoiler :
PY: BC - Minor civ Ottoman Tribe has huge miltary, 9 units
PY: BC - bNewWorld: 0, bUnits: 1, bCities: 1, bForeignCities: 0
PY: BC - Settling minor civ Ottoman Tribe into full civ
PY: BC - Holy Roman City State are close to new barb civ
PY: BC - Empire of Assyria are close to new barb civ
PY: BC - Viking Empire are close to new barb civ
PY: BC - Builup style force to Military
PY: BC - VIKING style!
PY: BC - Suleiman has organized the Ottoman Tribe! Turn: 179, Year: -2515 (after 13 turns as minor)
PY: BC - Giving The Wheel 0.666667 with 0.696970 loc
PY: BC - Giving military Metal Casting
PY: BC - Giving military Naval Warfare
PY: BC - Giving military Sailing
PY: BC - Giving military Bronze Working
PY: BC - Giving 2 partial techs, pass 0
PY: BC - Giving partial Trade: 55.5 perc (power 0)
PY: BC - Giving partial Military Training: 47.8 perc (power 10)
PY: BC - Best defender is Archer
PY: BC - Best counter unit is Axeman
PY: BC - Best attack is Axeman
PY: BC - Best mobile is Axeman
PY: BC - Distance to barb city Yayoi is 21 (path 18, rand 117
PY: BC - Distance to barb city Bactrian is 38 (path 31, rand 263
PY: BC - Distance to barb city Hsung-Nu is 18 (path 29, rand 243
PY: BC - GP type Great Prophet
PY: BC - Giving minor 6 offensive units in Istanbul
PY: BC - Placing boat in Istanbul
PY: BC - Constructing Monument in Istanbul
PY: BC - Culture of Istanbul set to 105
PY: BC - Constructing Walls in Istanbul
PY: BC - Constructing Forge in Istanbul
PY: BC - Giving new civ a boat
PY: BC - Giving two Axeman in capital with ATTACK_CITY AI
PY: BC - General will lead Axeman 114699
PY:Names - player is BarbCiv, keeping current name
PY: BC - Checking city Akhad for spread at radius 6
PY: BC - Spreading effects to Akhad
PY: BC - Increasing rev index in Akhad by 67
PY: BC - Checking city Birka for spread at radius 9
PY: BC - Checking city Kalakh for spread at radius 12
PY: BC - Checking city Ninevêh for spread at radius 11
PY: BC - Checking city Uppsala for spread at radius 9
PY: BC - Doing diplomacy for new civ
PY: BC - New civ starting at war with (full only):
PY: Revolt - The Ottoman Tribe are in their golden age!

After this I tracked down the python code to see where those last debug messages are written. The code blocks look like this:

Code:
contactList = list()
        for i in range(0, gc.getMAX_CIV_PLAYERS()) :
            if( newPlayer.canContact( i ) ) :
                contactList.append( i )

        if( style == "Military" and not newPlayer.isMinorCiv() and not newPlayer.isHuman() ) :

            # Declare war on prechosen target
            if( (not iAttackPlayer == None) and iAttackPlayer >= 0 and iAttackPlayer < gc.getMAX_CIV_PLAYERS() ) :
                newPlayer.AI_changeAttitudeExtra(iAttackPlayer, -5)
                pyNewPlayer.getTeam().declareWar(gc.getPlayer(iAttackPlayer).getTeam(), True, WarPlanTypes.WARPLAN_TOTAL)
                if( self.LOG_DEBUG ) : CvUtil.pyPrint("  BC - New civ declared war on the prechosen %s"%(PyPlayer(iAttackPlayer).getCivilizationName()))

            else :
                localWarChosen = (gc.getTeam(newPlayer.getTeam()).getAnyWarPlanCount(True) > 0)

                area = newPlayer.getCapitalCity().area()

                if( bNewWorldScenario and self.bFierceNatives ) :
                    # Fight any foreigners we can declare war on
                    for id in contactList :
                        playerI = gc.getPlayer(id)
                        capitalI = playerI.getCapitalCity()
                        if( (not area == None) and (not capitalI == None) ) :
                            if( not area.getID() == capitalI.area().getID() and playerI.getNumCities() > 3 ) :
                                if( area.getUnitsPerPlayer(id) > 2 or area.getCitiesPerPlayer(id) > 0 ) :
                                    if( 50 > game.getSorenRandNum(100,'BarbarianCiv: attack colonists') ) :
                                        newPlayer.AI_changeAttitudeExtra(id, -5)
                                        pyNewPlayer.getTeam().declareWar(gc.getPlayer(id).getTeam(),True, WarPlanTypes.NO_WARPLAN)
                                        if( self.LOG_DEBUG ) : CvUtil.pyPrint("  BC - New civ declared war on the foreign %s"%(PyPlayer(id).getCivilizationName()))
                                        if( area.getCitiesPerPlayer(id) > 0 ) :
                                            localWarChosen = True
                                        if( pyNewPlayer.getTeam().getAnyWarPlanCount(True) > min([newPlayer.getNumCities()+1,4]) ) :
                                            break

                if( not localWarChosen ) :
                    # Give them some boats to go raiding!
                    if( self.LOG_DEBUG ) : CvUtil.pyPrint("  BC - No potential victim civ")
                    if( not iAssaultShip == UnitTypes.NO_UNIT ) :
                        for i,city in enumerate(cityList) :
                            if( city.GetCy().waterArea().getID() == gc.getMap().findBiggestArea(True).getID() ) :
                                if( self.LOG_DEBUG ) : CvUtil.pyPrint("  BC - Giving new civ some boats for raiding")
                                pyNewPlayer.initUnit(iAssaultShip,city.getX(),city.getY(),3)
                                newPlayer.initUnit(iAssaultShip,city.getX(),city.getY(),UnitAITypes.UNITAI_EXPLORE_SEA,DirectionTypes.DIRECTION_SOUTH )
                                break

                    SDTK.sdObjectSetVal( 'BarbarianCiv', newPlayer, 'DoSurpriseAttack', True )
        warString = ""
        for teamIdx in range(0,gc.getMAX_CIV_TEAMS()) :
            if( not gc.getTeam(teamIdx).isMinorCiv() and pyNewPlayer.getTeam().isAtWar(teamIdx) ) :
                warString += "%s, "%(gc.getTeam(teamIdx).getName())
        if( self.LOG_DEBUG ) : CvUtil.pyPrint("  BC - New civ starting at war with (full only): " + warString)

        SDTK.sdObjectSetVal( 'BarbarianCiv', newPlayer, 'SetupComplete', 1 )

        # Add replay message
        mess = localText.getText("TXT_KEY_BARBCIV_MINOR_SETTLE", ())%(leadName,newPlayer.getCivilizationAdjective(1),civName)
        game.addReplayMessage( ReplayMessageTypes.REPLAY_MESSAGE_MAJOR_EVENT, newPlayer.getID(), mess, capital.getX(), capital.getY(), gc.getInfoTypeForString("COLOR_HIGHLIGHT_TEXT"))

        # Announce the barb civ settling
        if( self.LOG_BARB_SETTLE ) :
            bodStr1 = localText.getText("TXT_KEY_BARBCIV_WORD_SPREADS", ())
            bodStr2 = localText.getText("TXT_KEY_BARBCIV_MINOR_SETTLE", ())%(leadName,newPlayer.getCivilizationAdjective(1),civName)

            bLaunchPopup = self.bBarbSettlePopup and (not self.blockPopupInAuto or game.getAIAutoPlay() == 0)

            if( self.bNotifyOnlyClosePlayers ) :

                bSentActiveMess = False

                for idx in range(0,gc.getMAX_CIV_PLAYERS()) :
                    if( idx == newPlayer.getID() ) :
                        CyInterface().addMessage(idx, false, gc.getDefineINT("EVENT_MESSAGE_TIME"), localText.getText("TXT_KEY_BARBCIV_FULL_CIV", ()), None, InterfaceMessageTypes.MESSAGE_TYPE_MAJOR_EVENT, None, gc.getInfoTypeForString("COLOR_HIGHLIGHT_TEXT"), -1, -1, False, False)
                        continue

                    bSendMess = False
                    if( gc.getPlayer(idx).isAlive() and (idx in closePlayers or idx in contactList) ) :
                        bSendMess = True
                    elif( capital.plot().isRevealed(gc.getPlayer(idx).getTeam(),False) ) :
                        bSendMess = True

                    if( bSendMess ) :
                        CyInterface().addMessage(idx, false, gc.getDefineINT("EVENT_MESSAGE_TIME"), bodStr1 + " " + bodStr2, None, InterfaceMessageTypes.MESSAGE_TYPE_MAJOR_EVENT, None, gc.getInfoTypeForString("COLOR_HIGHLIGHT_TEXT"), -1, -1, False, False)
                        if( idx == game.getActivePlayer() ) :
                            bSentActiveMess = True

                bLaunchPopup = (bLaunchPopup and bSentActiveMess)

            else :
                for idx in range(0,gc.getMAX_CIV_PLAYERS()) :
                    if( gc.getPlayer(idx).isAlive() ) :
                        if( idx == newPlayer.getID() ) :
                            CyInterface().addMessage(idx, false, gc.getDefineINT("EVENT_MESSAGE_TIME"), localText.getText("TXT_KEY_BARBCIV_FULL_CIV", ()), None, InterfaceMessageTypes.MESSAGE_TYPE_MAJOR_EVENT, None, gc.getInfoTypeForString("COLOR_HIGHLIGHT_TEXT"), -1, -1, False, False)
                        else :
                            CyInterface().addMessage(idx, false, gc.getDefineINT("EVENT_MESSAGE_TIME"), bodStr1 + " " + bodStr2, None, InterfaceMessageTypes.MESSAGE_TYPE_MAJOR_EVENT, None, gc.getInfoTypeForString("COLOR_HIGHLIGHT_TEXT"), -1, -1, False, False)

            if( bLaunchPopup ) :
                popup = PyPopup.PyPopup(RevDefs.barbSettlePopup,contextType = EventContextTypes.EVENTCONTEXT_ALL)
                bodStr = bodStr1 + "\n\n" + bodStr2
                if( self.offerControl ) :
                    bodStr += localText.getText("TXT_KEY_BARBCIV_SPREAD_OPT", ())%(leadName)

                if( newPlayer.getID() == game.getActivePlayer() ) :
                    popup.setBodyString( localText.getText("TXT_KEY_BARBCIV_FULL_CIV", ()) )
                    popup.addButton( localText.getText("TXT_KEY_BARBCIV_OK", ()) )
                else :
                    popup.setBodyString( bodStr )
                    popup.addButton( localText.getText("TXT_KEY_BARBCIV_OK", ()) )
                    if( self.offerControl ) :
                        popup.addButton(localText.getText("TXT_KEY_BARBCIV_OPT_AM", ())%(leadName))
                        self.newPlayerIdx = newPlayer.getID()
                        if( self.bCancelAutoForOffer ) :
                            game.setAIAutoPlay( 0 )

                popup.launch(bCreateOkButton = False)

        gc.getMap().verifyUnitValidPlot()

        # Enable only for testing settling of barbcivs
        if( False ) :
            game.setAIAutoPlay( 0 )
            iPrevHuman = game.getActivePlayer()
            RevUtils.changeHuman( newPlayer.getID(), iPrevHuman )

Now one of the last python debug messages:

PY: BC - New civ starting at war with (full only):

So it seems that the bug occurs after this debug message is written. The python is exactly same as in RevDCM 1.00 but for some reason the bug doesn't occur in regular RevDCM, only in RoM.

One thing that is different than in RevDCM is the setting in Revolution.ini for the New World civs. So need to test if the bug doesn't occur when RoM's revolution.ini is replaced with the default ini from RevDCM.
 
On my test game I got the 'waiting for civs' bug and the python log at this point looked like this after I had switched to the civ which caused the bug - so problem occurs when minor civ turns into full civ:

Maybe I just missed something:
minor civ = still some barbarian civ without leader
full civ = get a civ name and a leader from a normal civ pool
am I getting this right?
(I think I still didn't get the minor civ concept ...)

So, Victoria was some time around before the "waiting for civ happend", and like I said, I just made her moves and she ended the turn, but at the next turn there was the problem again, becouse the situation haven't changed.
 
Back
Top Bottom