Appreciate this. A good start would be switching to an object based model - it makes complete sense for a game like Harem Hotel with many girls and rooms being available that function much in the same way.
A good example of this is with lobby events. Imagine if you could throw one onto a queue once you finish an event rather than having a sizeable number of if statements run every time the lobby is visited.
You could definitely reduce your main file from 30,000 by making your all rooms function in the same way. This can reduce a lot of boilerplate and make sure you don't have to check every possible condition whenever you interact with a door to "Talk" for example. The next event could merely be bound, with an optional tuple such as a condition (e.g. the friendship of another character must be >5)*, at the end of the previous one.
*see: anonymous functions / lambda expressions (they may be differently named in python but I have used them in the past)
This is targeted at reducing the amount of repeated code very similar to this:
Lastly, I'd seperate a lot of the text from your main game logic. This is more a personal preference thing, but it's generally considered bad practice to have one 30,000 line file dictating most of your game. Moving most of the text out to event specific files makes things much easier to develop when you have files with more manageable chunks.
This all comes from a cursory glance through a few files, mainly the main script.rpy, and the only reason I thought to look was the game often seemed to needed a bit more time to travel between areas than other games do.
Great game content wise though, hope this helps!