lolpaca, I struggled with it too. I decided to abandon the tile-based design (which C2 didn't natively support, per se, at the time that I started writing it.) Instead, I used C2's strengths: object oriented design.
With that in mind, I wrote my random number generator that uses a seed, instead of using C2's. This lets me generate the same random world, like minecraft.
I decided to start off making cave-like dungeons: irregularly shaped rooms and tunnels, all connected to each other somehow. I made a sprite object called cave rooms that has several frames of animation, each frame irregularly shaped. I adjusted the collision boxes to roughly fit the shapes of each frame, yet use no more than 8 sides as is recommended.
Now the generation: You run a loop that creates room sprites, randomly assigns them X and Y, frame number, rotation, and even flipped or not for maximum variability. You make them start moving around randomly, within a boundary. You make one of them stop moving. This one room is "infected" like in the evil sprite demo. Any room that bumps into it stops and becomes infected also. This continues until all rooms are infected, and stopped. Doing it this way ensures that all rooms are connected somehow, no stragglers.
Doing man made looking dungeons would work similarly, but use rectangular rooms and hallways moving in cardinal directions instead of all angles.
For how to keep the player confined to the room sprites, see my post: