I figured you might ask that... I have two thoughts.
First, I noticed that there are some places you have nested timeouts:
SetTimeout (3) {
msg ("NEW MESSAGE FROM JASON")
msg ("Where is the ransom dropoff?")
SetTimeout (2) {
MoveObject (player, Map)
}
and some where you have concurrent, overlapping ones:
SetTimeout (3) {
msg ("CONNECTED")
}
SetTimeout (4) {
msg ("DOWNLOADING...")
}
SetTimeout (6) {
msg ("DOWNLOAD COMPLETE")
MakeObjectVisible (Interview Transcript)
}
I could see the latter ones being more problematic. You could try making them all nested and see if that fixes the problem. (e.g. settimeout 3, then a nested settimeout 1, then a nested timeout 2). If they're serialized, they might work better.
The second try is a drop-in alternative to SetTimeout, something I just attempted to put together. It's a little bit hacky, but it seems to work. The only requirement is that you can only have one SetTimeout going at a time. This means you *must* nest your timeouts. You can't have (say) one for 3 seconds and one for 4 seconds going at the same time, as you do above. It only knows about the most recent one called.
Add this code to your game:
<function name="TimeoutCallback" parameters="param">
invoke (game.timeoutscript)
</function>
<function name="SetTimeout" parameters="time, script">
game.timeoutscript = script
JS.eval ("setTimeout(function() { ASLEvent('TimeoutCallback', ''); }, " + time*1000 + ");")
</function>
Basically, this uses JavaScript to do the timeout. It has a TimeoutCallback ASLX function that is invoked by the JS once the timeout completes. This callback then invokes the script that was passed. As long as you nest your timeouts, it should work properly.
Let me know if this doesn't work, and we can possibly look at why. But I think it should. (I'd definitely try nesting my timeouts first, as it may solve the problem, and you have to in order to use my code anyway.)
Edit: Note also that ASLEvent causes turn scripts to run. So if you use the code I gave above, it will fire your turn scripts each time a timeout occurs. I don't see you using any, but I'm mentioning it in general anyway.