Here's what we think
The locked jumpgates are the FLHash of the nickname of the jumpgate objects in question. I assume that when the game loads, it basically stores objects in a hashtable, whereby it uses the hash of the nickname of the object to id the item, and be able to access it. How? dunno, but it's a constant time search operation so it makes sense. The game, therefore, references all objects by hash.
How it makes gates locked I dunno, whether it uses different types of jumpgate object in the engine to set a flag to being locked or not I dunno. Not a games programmer, but that's how the file works. On starting, it most likely parses the file and loads up the fact that objects with that hash are not accessable.
Now, for gates/holes. I haven't seen how
the game defines what is a legal/illegal path. We note that legal = jumpgate, illegal = jumphole. Where this is actually defined (solararch?) i do not know, but since most people use either a jumpgate or a jumphole, and not custom ones, it appeared to not be something relevant at this time. The alien jumpgate is assumed to be illegal.
The paths generated are "shortest" paths, in the terms of numbers of system. Legal paths are shortest using jumpgates only, illegal are shortest using jumpholes only. You cannot plot a nav map waypoint via illegal, only legal appears to allow this to occur. So therefore, for navmap purposes, we assume only jumpgates matter - it appears to be a fair assumption.
The algorithm is quite simple, it's a shortest path algorithm. It start with a system, find the systems connected to it via jumpgates, and then map those as being 1 path (so that's like Li01, Li02, Li01, Li02).
Then it goes from the systems it's just found, gets their gates, and if they're not visiting a system already found (so from Li01 it finds Li02, Li03, Li04... and Li05), it will map those too (so Li01, Iw03, Li01, Li02, Iw03) If there was a jumpgate from li02 to Li03, it won't map this path - a shorter one from Li01, Li03, Li01, Li03 exists than Li01, Li03, Li01, Li02, Li03, so this path is ignored).
It does this until either all systems are visited, or it runs out of connections via jumpgates.
When it's doign shortest illegal, it does exactly the same - but using jumpholes instead of jumpgates. For System_shortest_path.ini, it does the same - but uses any method - so either jumpholes or jumpgates.
This is all, however, based upon assumptions - what constitutes a legal path, illega path, and shortest path. We THINK we've got this right.
It also assumes that there is no method of determining which path is actually physically
shorter - for example, when going from Manhatten to New Tokyo, there's TWO paths of the same system length. That is because from Colorado you can either take one of two possible systems... I think it's Kepler and the other one... i can't remember there names, but it's Iw06 and Iw05. My algorithm doesn't descern if there's any method of working which is shorter phyiscally - both include the same number of jumps. Does it make a difference though? No, both paths plot fine depending upon which you have in the files.
We're also assuming that in system waypoints are determined by the game engine without our knowledge. Now this bit is pure pure assumption. I assume that when you (for example) plot the path from Li01 to Ku01 (manhatten to tokyo) that it loads this path up and displays it on the nav map. This path does NOT get reloaded as you, for example, jump into Colorado... it retains the path of Li01, Ku01, Li01, Li03, Iw06, Ku03, Ku01 - i've altered the path from Colorado (in the files) to be using the other Independant World (so Iw05), and when I jumped to Colorado the universe nav map did NOT change course... so once loaded, it keeps that path loaded.
So the assumption is that when you're progressing, it loads the path up and displays it on the nav map (universe map). However, when you VIEW each system individually, it utilises another hardcoded method to determine the waypoints within the system. I assume it searches for any legal method of getting from the system to the next system on the path. So an internal search goes for the jumpgate that has a goto line for the next system. eg, in Li01 it searches for the jumpgate that will go to the system Li03, and allows waypoint plotting using shortest path within the system (tradelanes or space dependant upon location) to sort out where all the waypoints lie.
When you jump to Colorado, it looks at the pre-loaded path and sees Iw06 as the next location, so looks for the jumpgate (legal path) that goes to Iw06. Once found, it uses that internal waypoint system to plot to that location.
Now I say once found... not strictly true, as if it attempts to find a non existant jumpgate, it actually plots to the sun.
I haven't tried putting objects higher in the order of system layout THAN the sun to see if it plots to the sun or the first object reference in the system file (order of loading into hashmap?). Anyway, it doesn't crash.
Having path files altered also didn't cause crashes - hence how i tested that it loaded one path file and stuck to it as you progressed, instead of re-plotting every time you jump... so that doesn't cause crashes.
I did find that it says "no path available" when no entry exists in the Shortest_legal_path for that jump. I haven't tried removing ALL paths for that system, just the odd one - but that's when the message appears.
If you have an incorrect shortest path file, so shortest_legal_path professes to have a root from Manhatten to Omicron Alpha available, it actually plots it in the Universe Map as per the root stipulated (try it). However, in the systems themselves, on the nav map, you find it behaves strangely - something I pointed to earlier. It plots just fine until it hits a system that has no jumpgate to the supposed next system in sequence... this for me was Ku03 to Ku02... there's no jumpgate. There IS a jumphole (which is what the shortest_legal_path file plots out) but no jumpgate - so it set the waypoint to be New Tokyo's jumpgate.
When I arrive in New Tokyo, it's NOT on the overall path in the shortest_legal_path.ini - so no waypoints existed in the system view for this system. If it loaded up the New Tokyo to Kyushu path, it would have plotted points, but it didn't... so it doens't. I had to jump to Kyushu before the waypoints picked up again.
So this proved that having a path file which didn't match the actual real path available does NOT cause crashes. If it's halfway through journey (so you plotted path from Li01 to Hi01 whilst in Li01) - it works fine until you reach a system that doesn't have a jumpgate its looking for - but no crash.
If it works from attempting to plot a travel from Li01 to Rh01, whereby the shortest_legal_path file had a path of Li01, Rh01, Li01, Rh01 - when you launch, it plots to the star.... still no crash.
So I've not experienced any crashes with bad paths whatsoever... which contradicts directly with what others are saying. Only issue being, they're using mods. I did it on vanilla FL, which is why I was confident enough to therefore generate path files for mods
Some notes - my path generation takes into account locked jumpgates, IF the mod maker tells me the nicknames of locked jumpgates in their mod
These jumpgates won't be included when generating paths.
This matches Freelancer itself.
The storyline we THINK uses the system_shortest_path.ini file, but I think the storyline also manually plots waypoints for you, so I am not convinced. All I do remember is that IF the system doesn't contain an entry in the systems_shortest_path... then you get a crash. I haven't tested this in the past 4 years, so it may be worthwhile testing it out, but this only crashes (from memory) when jumping. I don't think i ever tried to plot waypoints though, but like I said before - I don't exactly have lots of time to start experimenting with Freelancer to try and work out the way it all works
Hope that helps clarify what we BELIEVE to be the case with Freelancer. If anyone knows different, suspects different, or disagrees - then please contribute
Tis easy to argue against, but when you're asked to prove or back up, things tend to fall silent.