You can implement a global variable that flips between each mode.
You can reduce the amount of frames that are being rendered per second.
So for example, for a manager object you can have this code in the create event:
//Slow mode
if(global.gameplayMode == 0)
{
room_speed = 30;
}
//Fast mode
else if(global.gameplayMode == 1)
{
room_speed = 60;
}
And for calculations
some_stuff = irandom(9001);
if(global.gameplayMode == 0)
{
moreCalculations();
}
EDIT
//Declare the variable
global.worldPace;
//If you'd like the game to run at half speed then set it to 0.5
global.worldPace = 0.5;
//But if you'd like the game to run at regular speed then just set this to 1
global.worldPace = 1;
And for all of the calculations, just multiply everything by this variable so for example
runningSpeed = 9.8 * global.worldPace;
I've never fiddled with this idea but this is where I'd start.
I'd consider the amount you have to add for geometric functions. You'll have to make sure that whatever value you add, you distribute in the exact same manner when slowed down.
A good example and simple example would be as follows:
If over one frame you move a bullet 2 pixels to the left, with this slow-mo mode you'd now have to split this simple action into two, which means that the action of bullet moving would span over two frames, and in each frame the bullet would only move 1 pixel.
I'd imagine this would be harder to nail down with more complicated functions, so be careful with how you approach them.