I had a few bugs pop up in my code and after a bit of tracking down I discovered the weirdest thing. I put two pieces of code either side of a problematic chunk. Both were the same thing :
Code:
    ShowMessage(Ships[0].Script.Name);
I then kept moving the two lines closer together and waited until they both matched up then I would know where the value was getting corrupted. I eventually got them with just one unimportant line of code (it was my log file updater ) separating them. and still the results were different. So I removed the line completely and lo and behold the results were still very different.

Code:
    ShowMessage(Ships[0].Script.Name);
    ShowMessage(Ships[0].Script.Name);
This code results in two different returns. How the hell is that possible. I am not using threading so unless by virtue of me simply asking what the value held within the variable is changing it then I can't see why the result should be any different.