after fighting with various errors like "Your script made an error: the index "ai_et_engine_available" does not exist" and add the compatibility lines from the compat1.1.nut
file to the compat1.2.nut file (the AI uses 1.2 API - but have serious problems with it .....) the AI runs very well and nice ...
But after every load of an savegame the AI crashes first time ... then its run nice again ..

Assuming NoCAB does set it's API version apporately the compat.nut layer should provide the old enum constants. Did you correctly install OpenTTD with all its files, and also did not place any files from a newer/older version in your OpenTTD directory in user documents?

Since NoCAB can be such a well performing AI if it doesn't crash I had a go at fixing the main problems.

1. Crashing when saving. Since it stores a lot of info NoCAB often ran out of time, especially on larger maps, when saving.
Since I think staying alive is more important I changed it's save logic to stop saving it's connections as soon as it detects it's getting close to running out of time.
Of course it will not know some of the connections after loading a save game but at least it will not crash and keep running the current game.

2. It was not taking the map borders into consideration when checking available spots near towns. In certain cases when a town was near the map border it could take very long (about a year) to decide on available tiles.

3. On large maps with a high amount of towns and industries it could cause OpenTTD to run out of memory causing it to crash. The cause of this was that NoCAB tried to store data for all towns and industries. I changed this to limit the towns to the top 1000 towns with the highest population and a random choice of a maximum of 2000 industries.

4. Loading a savegame could cause a crash because certain data needed to determine the route travel time wasn't saved. We fixed this by recomputing certain data after loading a savegame.

Alberth wrote:One trick you might consider is to prepare the save data beforehand, ie after a significant change. That way, you'll have the save data ready and just have to point to it and say "save that".

Yes that is certainly one of the things I had in mind too but I thought it better to get something that is working (as far as I know) published then to wait until everything that can be improved is done. Even better would be if it's possible to get rid of or reduce all that path data that gets saved but currently it's needed for computing the time a vehicle takes to go from one end of a route to the other.

It sounds like data you can recompute after loading, or even anywhen you need it.

A possible alternative could be to keep such path data but for one route (or a few). When you want to review some vehicles, first recompute that data, run the analysis, and let go of the data when you no longer need it (vehicles are performing satisfactory).

Being a retired OpenTTD developer does not mean I know what I am doing.

Made some more improvements and fixes though no changes in the save/load code yet.
Most changes are related to better train handling.
Besides that there are improvements in

Closing connections where vehicles are now sold

replacing old vehicles with new ones now also works for trains, including refitting.

replacing vehicles even works if we are at the maximum allowed amount because we sell first

Tweaked road and rail pathfinding costs. It should use less tunnels and bridges and up to a max length of 15. It should also favor reusing roads a little more.

Lots of other changes to improve crash safety.

Most things I wanted to fix are done now. I'm thinking of uploading it to bananas to have a working version of NoCAB again.
I'm open to suggestions how I should name it. Currently I use WormCAB but I could use NoCAB Fixed or something like that too since the main purpose was fixing it not making further improvements or changes.