Just curious because I never seem to run into load times during gameplay when testing the game I'm developing (aside from initial start up) so can someone explain to me what they're used for in Game Maker?
Loading time isn't exactly "used for" anything. If you have load times, or the freezes associated with not having a loading screen mask them, it's a sign that you're trying to do more than your target device can do within one frame. It's based on the exact same principle as lag, except that freezes are an even higher escalation of the causes of lag (doing more than the device can handle) over extended periods of time.
It's like telling an employee that they have to do 1000% of their usual workload today in the middle of their daily routine, and that they have to take care of the additional work immediately. In a world where a "day" doesn't end after a defined amount of time, they will eventually complete their job that day, but it'll take them longer than usual and they will have to drop their routine while they're working on the extra workload.
So wait, if I just have a bunch of rooms that the player can go to, are they only loaded once the player is actually in that room, or do I have to do something specific to make sure that room isn't loaded in?
They are loaded when you enter and unloaded when you leave them.
Okay but let's say I run a script that freezes the game for a second, and I use it at the start of each room any time the player enters a new area, how would I work a load screen into that situation?
Only asking here because I can't find a youtube tutorial on load screens. :/
I guess that leads us to the "real" topic title: "How to display a loading screen rather than freezing?"
To put it simply: Probably not at all.
Normally, you'd implement this by offloading whatever loading tasks you have to a separate thread, then displaying some sort of animation as the loading screen the player sees. This main thread would wait for the loading thread to complete before the game continues.
The problem with that is that there are no threads in GML aside from the main one. You can't spawn new threads, at least not by default. There were some extensions for old and not so old versions to add this functionality in a limited manner, but whether they work for the current version and how long they will continue to do so is a separate question.
Lacking threads, the only thing you can do is to manually interrupt and then resume your loading code the next step.
For example, imagine you're loading a map with a size of 100x100 tiles, and every second, for the sake of simplicity, you can load exactly 100 tiles. This would mean that every 100 tiles, you'd have to stop loading and resume next step.
Ideally, you won't do this after a specified amount of loading has taken place, but after a certain amount of time has elapsed since the beginning of the frame. This amount of time should be less than the duration of one frame at your target frame rate, taking into consideration that drawing the loading screen will also take time - let's say if one frame takes 16ms, cutting it off at 10ms should be a safe bet unless drawing your loading screen takes 6ms, at which point you'd have a bigger problem to take care of.
Failing even that, your fallback would be to set an alarm to 1, draw a (static) loading screen during the first frame (and only during the first frame), and one step later execute your loading code. This will draw a "loading screen" while the loading takes place, although the game will be unresponsive and frozen during this time.