The problem here is that it is bad coding, because when this 'missile' trys to delete itself, it is going to call that delete loop, which then in turn gets to the missile, and calls the del proc, which calls the loop, which calls the missiles del proc, etc etc, in a never ending cycle.

You're looping through view(), which includes the Center object. So you're deleting the missile, which then tries to delete itself, which makes it try to delete itself AGAIN, and again and again and again and again... ad nauseum. (Or should that be "ad crasheum"? Har har, bad joke. Anyway...)

The fix? A single character. Just add an "o" on the beginning of "view", and it should work...

...EXCEPT...

What happens if a missile is deleted while there's another missile of that type in oview()? One tries to delete the other, which tries to delete the first one, which tries to delete the second one, which tries to delete the first one... hmm, this looks familiar. You need to include a check that stops it doing that; easiest way would be to not let missiles delete other missiles by including an istype(). A slightly better way would be to set a flag on missiles just before they run their for() loop that causes other missiles to not delete them. I see you've already got a "dontdeleteme" flag, so you're half done already!

Oh, and world.loop_checks=0 is pure evil and serves no purpose whatsoever. That message really needs to be removed; it gives the false impression that surpressing the error message will fix the problem. It won't, and the game will either crash (as in your case) or lag to high heaven.

Oh, and world.loop_checks=0 is pure evil and serves no purpose whatsoever. That message really needs to be removed; it gives the false impression that surpressing the error message will fix the problem. It won't, and the game will either crash (as in your case) or lag to high heaven.

During stuff like random map generation you occasionally need to loop a lot or recurse very deep in which case this falsely triggers the loop check.