Special 0xFB doesn't really delete pokemon. It seems to do some slot copying. Probably used in facilities like battle factory.
Hmm...it seems you've hit a wall. You see, the fly function will end your script earlier, so the special 0x29 will be never called. I would personally try to make a hook somewhere, so the displayed pokemon can be chosen via a var or a flag.
Try to think of something and if you're not able to do anything, I'll provide a hook.(and when I have time :P)
I guess you'll have to write a bit of your own asm. For now write a simple function that will store 0x08124691(this is the address of a function that starts the world map fly selection screen) at 0x030022C4 and callasm it from a script.
The fly animation uses the byte at 0x0203CED1 to decide which pokemon to show. It's pokemon index.
You can do a callasm to 0x80B69DD function from a script and the fly will work although your screen will flash a little and the warp will be random.
To set the warp you will need to call a function at 08084C28. You can't do it from callasm though, because it takes 3 arguments, map bank, map number and warp number.