rojohound, Very interesting way to do the worm pixel detection. If I understand correctly, you are testing every pixel on the edge of the Worm Sprite to see if it is touching a ground pixel as indicated by the Array. You used an Array so you could have a "detectable" pixel (the x,y coordinate in the array.)?
I have an Idea to use image points on a sprite (2 bottom 2 mid-sides 2 top) and cycle through them per tick: Something like this:
For "Cycle"=1 to 6
->System Compare 2 values -> Canvas rgbAt(sprite.ImagePoint(Loopindex("Cycle"))=rgba(Whatever color the ground is)
Then move back like you did if it touches.
Would that work? And Would that speed up the FPS? (Haven't tried it yet... Waiting for Day Off... UGH!!!)