I agree, the first APLAYER block probably fell through at one point, which would nicely explain why that "else" exists.
I am a bit confused on the second part though. Maybe I'm reading it wrong.
It looks like the "if (j >= 0 && sprite[j].picnum == APLAYER)" part doesn't depend on the previous case falling through, since it's checking (what I assume to be) the owner sprite that is spawning the bubble, instead of sp->picnum directly
