That's because everything above the "Wait" action in the loop is actually executed in one tick. So first ShellX and ShellY are changed 3 times, and this happens immediately. After about 0.5 seconds your explosions are created and they use the same last values of ShellX and ShellY.
There are several ways to fix this. I would probably do this:
Add shadow and explosion to the same container. Set explosion sprite invisible by default. Spawn shadows (explosions will be created automatically). After a wait set explosion visible - it will appear at the same position as its shadow.