Ok so a couple people were wondering how I approached parallax with Game Maker, so I thought I'd make a little post showing how I did it. Keep in mind that almost all of my code is based on the foundation of Matt Thorson's Grandma Engine, so at least half of the credit goes to him!
The other thing I would like to mention is that I'm definitely not saying this is the only or best way to do parallax. This is just the way I do it so take it with a grain of salt.
Ok, let's get started!

From the top: the first thing happens in my game initialization code, where we create the player object:

Let's check out what's inside createStoryPlayer().

5: We create an instance of the player object.
6: Then we create a "view controller" object. In game maker, you can set a view to follow a a specific object, but if you do, the camera is stuck to it - you can't set it to smoothly follow that object. So the purpose of the view controller is basically act as the centrepoint of the camera. In the actualy room view options I have "Object Following" set to o_viewcontroller. We can then determine exactly how fast or slow we want the view controller to follow its target in the o_viewcontroller step code.
7: The player's viewIndex has to be the same as the viewControllers attached view, so we can make sure the HUD doesn't get drawn on other people's screens.
8-14: input and hud stuff.
Let's check out createViewController():

The arguments we pass to it are: the x and y of where we are creating it, the id of the target we want it to follow, and the number of the view [0-7] that we want to follow it (because in versus mode we will have 4 different views).
8: Create an instance of the view controller.
9: We set the view controller's target to the player.
10: We set the view controller's attached view, to the first view (0) in this case.
And finally, here is the view contoller's step event, which contains the parallax code:

5-15: If the view controller has a target that exists, we make it move towards that target. It's basically just a lerp (or sinerp? I'm not sure. Some kind of erp) function - the closer the view controller is, the slower it moves, so that we get a smooth scrolling effect.
17-18: Here we introduce four variables - prev_xview, prev_yview, and parallaxX, parallaxY. view_xview and view_yview indicate the x and y positions of the indexed view ([view], or in this case 0). At the end of every step we set prev_xview and prev_yview to the current xview and yview of the attached view. This way, when we check them next step, they contain the previous positions so we can calculate how far the camera/view/view_controller has moved. We then set parallaxX and parallaxY to contain this distance.
21-40: Here is the actual parallax code, which is probably the most straightforward part. To be honest I actually forget why I have the if statement there - I think it's to prevent the camera jumping around when I switch rooms, but I'm not sure. You can probably just do without it.
Then we shift the background layers according to how far the view controller/view/camera has moved. Background 7 is the closest one, so we shift it the least amount. The further back the layer is, the more we shift it. The furthest back layer, 0, which in Archer holds the moon, shifts the same amount as the player moves, so it doesn't appear to move at all. This is because when things are that far back there is no noticeable parallax to the human eye.
And that pretty much sums it up! I probably gave you guys way more information than you needed, but I hope you can find something helpful in there.