Maniac
Apolyton Sage
The Planetfall mod is having some trouble with unrepeatable crashes.
When using AI Autoplay, the game crashes say once every hundred years or so. However when restarting autoplay from the latest autosave, the problem never repeats itself.
Occasional OOSes have also been reported in multiplayer.
When playing a game myself, the game seems to crash not often, but still from time to time. But always, here too the crash is unrepeatable. Instance where it occured are: 1) moving a colony pod/settler to some plot; 2) loading a save game; 3) ending the turn; 4) opening the F6 screen, wanting to drag the screen to the right but missing the scrollbar and clicking and dragging a little on the area right above the scrollbar.
Latest occurence (5) involved the city screen. I wanted to remove a specialist. I'm not sure I clicked the 'remove specialist' button - I think I misclicked again. Result was a python exception. It claimed there was an unidentifiable C++ exception/error(?). The line it pointed to was in CvMainInterface.py. I tabbed out of the game to check out that python file. When I tabbed back to Civ4 a while later, the game crashed again.
Anyway, the line it pointed to was:
Part of:
Part of the "def updateScreen(self):" function.
This function has not been modded by the mod.
Does this python exception ring a bell with anyone as to what could be the possible cause of the crash?
Is there any way to pinpoint the causes of these crashes in general?
When using AI Autoplay, the game crashes say once every hundred years or so. However when restarting autoplay from the latest autosave, the problem never repeats itself.
Occasional OOSes have also been reported in multiplayer.
When playing a game myself, the game seems to crash not often, but still from time to time. But always, here too the crash is unrepeatable. Instance where it occured are: 1) moving a colony pod/settler to some plot; 2) loading a save game; 3) ending the turn; 4) opening the F6 screen, wanting to drag the screen to the right but missing the scrollbar and clicking and dragging a little on the area right above the scrollbar.
Latest occurence (5) involved the city screen. I wanted to remove a specialist. I'm not sure I clicked the 'remove specialist' button - I think I misclicked again. Result was a python exception. It claimed there was an unidentifiable C++ exception/error(?). The line it pointed to was in CvMainInterface.py. I tabbed out of the game to check out that python file. When I tabbed back to Civ4 a while later, the game crashed again.
Anyway, the line it pointed to was:
Code:
screen.setEndTurnState( "EndTurnText", acOutput )
Part of:
Code:
if ( CyInterface().shouldDisplayReturn() ):
acOutput = localText.getText("SYSTEM_RETURN", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
[i]screen.setEndTurnState( "EndTurnText", acOutput )[/i]
bShow = True
Part of the "def updateScreen(self):" function.
Spoiler :
Code:
# Will update the screen (every 250 MS)
def updateScreen(self):
global g_szTimeText
global g_iTimeTextCounter
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
# Find out our resolution
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
self.m_iNumPlotListButtons = (xResolution - (iMultiListXL+iMultiListXR) - 68) / 34
# This should recreate the minimap on load games and returns if already exists -JW
screen.initMinimap( xResolution - 210, xResolution - 9, yResolution - 131, yResolution - 9, -0.1 )
messageControl = CyMessageControl()
bShow = False
# Hide all interface widgets
#screen.hide( "EndTurnText" )
if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY ):
if (gc.getGame().isPaused()):
# Pause overrides other messages
acOutput = localText.getText("SYSTEM_GAME_PAUSED", (gc.getPlayer(gc.getGame().getPausePlayer()).getNameKey(), ))
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif (messageControl.GetFirstBadConnection() != -1):
# Waiting on a bad connection to resolve
if (messageControl.GetConnState(messageControl.GetFirstBadConnection()) == 1):
if (gc.getGame().isMPOption(MultiplayerOptionTypes.MPOPTION_ANONYMOUS)):
acOutput = localText.getText("SYSTEM_WAITING_FOR_PLAYER", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), 0))
else:
acOutput = localText.getText("SYSTEM_WAITING_FOR_PLAYER", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), (messageControl.GetFirstBadConnection() + 1)))
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif (messageControl.GetConnState(messageControl.GetFirstBadConnection()) == 2):
if (gc.getGame().isMPOption(MultiplayerOptionTypes.MPOPTION_ANONYMOUS)):
acOutput = localText.getText("SYSTEM_PLAYER_JOINING", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), 0))
else:
acOutput = localText.getText("SYSTEM_PLAYER_JOINING", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), (messageControl.GetFirstBadConnection() + 1)))
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
else:
# Flash select messages if no popups are present
[i]if ( CyInterface().shouldDisplayReturn() ):
acOutput = localText.getText("SYSTEM_RETURN", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True[/i]
elif ( CyInterface().shouldDisplayWaitingOthers() ):
acOutput = localText.getText("SYSTEM_WAITING", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif ( CyInterface().shouldDisplayEndTurn() ):
acOutput = localText.getText("SYSTEM_END_TURN", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif ( CyInterface().shouldDisplayWaitingYou() ):
acOutput = localText.getText("SYSTEM_WAITING_FOR_YOU", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
if ( bShow ):
screen.showEndTurn( "EndTurnText" )
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isCityScreenUp() ):
screen.moveItem( "EndTurnText", 0, yResolution - 194, -0.1 )
else:
screen.moveItem( "EndTurnText", 0, yResolution - 86, -0.1 )
else:
screen.hideEndTurn( "EndTurnText" )
self.updateEndTurnButton()
if (CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START):
self.updateTimeText()
screen.setLabel( "TimeText", "Background", g_szTimeText, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 56, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.show( "TimeText" )
else:
screen.hide( "TimeText" )
return 0
This function has not been modded by the mod.
Does this python exception ring a bell with anyone as to what could be the possible cause of the crash?
Is there any way to pinpoint the causes of these crashes in general?