Thunderbrd
C2C War Dog
If that save is from just before they do so, I may well be able to find the issue. I presume they aren't attacking after you've captured the city either right?@ TB
its happening alot lately, forces leave their city with alot of troops and only leave 1 unit in city when i am attacking with really less than 2 units??
Wow... it would be a big step to break compatibility.Kp
There is a limit of 8192 for things like SelectionGroups.
Reusing old Id's is a bad idea, there could be old references to them stored somewhere and reusing them could lead to odd bugs.
There are a few ways to fix that but most of them could increase turn times and/or memory usage. But it has been a long time since that issue came up so it doesn't have a high priority.
Splitting barbs and animals should have been done long ago and i personally don't care if it breaks compatibility. You and me made changes which could cause odd behavior in old saves but luckily nobody really noticed it. That basically means compatibility should be broken more often to avoid odd bugs in old saves.
I get there being a limit of the # of selection groups but I would think for sure I've seen numbers on their IDs being much much higher than 8192. I could be wrong.
The thing is, this is happening on a pretty early on game and selection groups are often created then destroyed very quickly when units leave other groups, join back etc. We may end up seeing this problem manifest before or within Galactic even if the system isn't all that stressed.
I'm not against splitting barbs and animals and we could/should start a thread to discuss what all we want to get out of a compatibility break if we're going to do it.
There will be a lot of little things involved in splitting animals and barbs... will take some serious effort to do this right.
Sorry, this is an easy fix but I tend to forget the simple stuff. I'll try to remember this time.In #353, I mentioned a problem with Felis Superior. The problem still exists with SVN 8921.
To elaborate, Felis Superior requires Effect - Big Cat Trainer, which obsoletes at Aviation. Felis Superior also requires Homo Superior.
I wanted to find out if it was possible to build Felis Superior if you actually didn't research Aviation until you were halfway through TH, but Aviation is a prerequisite for Homo Superior. One of the research chains goes as follows:
Aviation -> Rocketry -> Jet Propulsion -> Advanced Rocketry -> Guided Weapons -> Communication Networks -> Neural Networks -> Machine Learning -> Augmented Reality -> Ubiquitous Computing -> Gene Enhancement -> Mainstream Cloning -> Rapid Recuperation -> Bionics -> Cybernetics -> Species Uplifting -> Homo Superior
And another thing: In the Civilopedia, you cannot open a promotion page anymore. If you click on a promotion, the main page stays blank and you get back to the top of the promotion list. This happens in SVN 8921 as well.
I wondered if disabling multithreading would work initially.If Python ever gets invoked on any but the main thread a crash is likely to result because the game engine does not have any multi-threading support. This means that all multi-thread support has to be 'hidden' strictly inside the code we run in the DLL or else all hell breaks loose (usually manifesting as a heap, corruption which fits these symptoms). Since we have no control over what happens in a Python call (what the invoked Python will itself then call) it means it is always unsafe to invoke a Python call on any but the main thread. The DLL code goes to some lengths to avoid this happening (stuff gets queued from the background threads to be invoked on the main thread explicitly), but it may well be we missed a few cases. To address this there is a workaround, and a debugging process (so workaround for a user experiencing it, process to follow for someone trying to fix it):
1) To work around it disable multi-threading. There's a one line setting in the config XML to achieve this, which I'm sure someone can look up in the XML and report back here (set the thread count to 1)
2) To try to get to the bottom of it put a debug breakpoint on the assertion failure that spots non-main-thread Python invocation to find out where in the code its making a Python call from where it shouldn't. Having found that point stop it happening, either by removing the need to call Python there somehow, or by queueing it onto the work queue to be executed by the main thread (there is already code to do this in various places, but I forget the exact details)
The solution is at least a start as to how to go about it. Since I'm not familiar with working with multi-threading I'm not sure I will be able to do the ideal thing, which will be to queue it onto the work queue as you explained, but I should be able to find and disable it... God (or maybe DH) knows what the python is trying to do here.
Thanks though Koshling... very nice to see you in the main forum again!