I was messing around with the event, and deleted special 0x29, which causes that after the event, you still have the Zigzagoon. However, there is something special about this Zigzagoon: it has no ability instead of Pickup.
If we could import a special table that connects every Pokemon with its Dream World ability, and the game then checks when encountering the Pokemon where the player is, and when it's at a special place, the Pokémon will have that ability.
I think all of this is possible by creating and editing ASM routines.
What do you think? Is this a good idea? If you can help, please help. Maybe we could make our very own Dream World!
I would require a bit of hacking. Abilities in the Pokemon Structure in the RAM of the 3rd Generation is stored in a single bit (which can only have two values, 0 or 1).
However, if you created sub-routines for EVERY routine that reads for Abilities, then it is possible to branch to a different table if certain criteria is met. But, I would assume, there are quite a few routine that do this.
So yeah, it's possible, but I don't see anyone doing it for you unless they wanted it in their hack aswell.