Why make a custom platform movement?

Because you can do more stuff with it. With the normal platform movement you can't easily code water, springs, or double jumping, and stuff like that. The standard platform movement is also very buggy - it relies on speeds and directions instead of X+ and Y+ setting, and often the detectors can lead to your player hanging onto a platform with just his nose, or something.

Getting started

Right. First, you need to create all your objects. You need your character, and 5 detectors. 'Detectors?' you might think. Well: Detectors are used in almost all custom movements to detect if the player can go up, right, etc. We cannot detect if the player has collided with anything because with that you can't tell if he's collided with the ceiling, left wall, or whatever.

Anyway. Create 4 detectors: Top, Left, Right, and Bottom. The top and bottom ones should be 3 pixels high, and the left and right ones should be three pixels wide. Use an Always event to position them all around your player, so they keep up with him/her/it: Top should be on head level, Left and Right on the sides, and Bottom on the feet.

The first steps

Value A will be our X+ value, Value B will be the Y+ value. You should figure out what these mean soon. Add the event:

Always:
Set Y Position of Player to the Y Positon of Player + Value A
Set X Position of Player to the X Positon of Player + Value B

Understand that? Here's a quick example: If Value B was 3, it would always move 3 pixels to the right. If Value A was -2, it would move -2 pixels down, or 2 pixels up. So all we have to do is change these values, and the player will move accordingly.

Left and Right

X positions are easier so we'll start with them. Remember, to go left, subtract 1 from Value B, and add it to go right. Putting that into events:

Repeat while left arrow is pressed
And Value B is less than 6:
Subtract 1 from Value B

Repeat while right arrow is pressed
And Value B is greater than -6:
Add 1 to Value B

(Finally changed after much confusion )

This also makes sure that the player cannot travel more than 6 pixels at a time. However, this method doesn't allow automatic slowing down. So add this:

Repeat while left arrow is not pressed
And Repeat while right arrow is not pressed
And Value B is less than 0 (ie a minus number):
Add 1 to Value B

Repeat while left arrow is not pressed
And Repeat while right arrow is not pressed
And Value B is greater than 0 (ie a plus number):
Subtract 1 from Value B

Make a program with this so far and try it. You should be able to speed up and slow down. If you want, you may want to add a 1/10 second restriction on this to make it speed up less quickly. But why have we included the detectors if there's no use for them yet? Because there's nothing to collide with! Make a backdrop and set it to obstacle, and add an event like this:

Left marker is overlapping the background:
Set Value B to Value B * -1

This makes the player 'bounce off' the obstacle. This works with the right marker as well, so you can copy and paste it. Or you may want to:

Left marker is overlapping the background:
Set X position to X position + ( Value B * -1 )
Set Value B to 0

This stops the player from going any further. This is also copy and pasteable for the right marker as well. Experiment, and you may find the way that works best for you.

While we're at it, you could add a wall spring by setting Value B to -8 or 8, depending if it's left or rightward facing. Play around with it, and see what you can come up with.