Some helpful design principles.
1. Make Sure You Aren't Reloading The Same Resources
Keep track of whats loaded already, clone existing objects and texture using existing images before loading new ones.
This will keep the memory footprint efficient and you can skip massive heaps of load times.
2. Preload Resources You Know You Need
Don't load monsters on the fly in real-time, load them all ahead of time. If at all possible, some games don't have load screens.
3. Cache Resources You Know You Might Need
Have a copy of the object loaded even if it's not being used. Then clone or instance the object when needed instead of loading it. For example suddenly you need 100 bits of debris for an explosion, or you need 10 Monsters loaded now. If you have a guy with a Rocket Launcher, cache the rocket.
4. Use Enhanced Animations Addon
You can attach animations to objects without having to load them from a file each time. Also keep animations spread out on multiple "animation objects/files" so the process of attaching animations to your objects can be shorter if managed well. Object files for your game characters shouldn't have the animations bundled into the same file for this reason. TLDR: Cut down on what needs to be loaded.
5. Manage And Prioritize Sounds
If there are too many sounds to load all at the same time, keep track of how often they are played. Keep the more frequently used ones loaded using a priority system. Build in priority levels, since some sounds might be known to be needed, or take a very long time to load, where you might want to ensure it stays loaded. In the body of the game only use Customized Functions like PLAYGAMESOUND(Pathname$), let your priority system handle the details, that way you aren't juggling loaded sounds everywhere in the body of the game code.