Yeah I'm curious to hear. The only reason why this might be happening is if any of the item iteration logic is doing a lot more work than expected. Sadly the dev environment is difficult to test such things like timing.
It might be something to do with these lines:
for surface_name, surface in pairs(game.surfaces) do
local cargo_pods = surface.find_entities_filtered({ name = "cargo-pod" })
for _, pod in pairs(cargo_pods) do
if not (pod and pod.valid) then
break
end
I could probably write some caching logic that would check all surface once, go through each and only keep spaceships and planets. After that, I could just check if the number of games surfaces changes, otherwise skip all of those.
What I'd really love is to find an event for 1: launching a rocket, 2: orbital dropping. Then I could just listen for those and never do the nth_tick.