This involves a lot of trigonometry...
Let's divide line AB in half and call the midpoint M, such that M is at 128.
And let's call the 'bottom of the arc' point C, such that point C is exactly 32 points beneath M.
Let's also imagine that the arc is part of a larger circle centered at point O, which is located some unknown distance OM from M, i.e. some unknown distance OM+32 from C.
So lines OA, OB, and OC are all the same distance, which we will call R (because it is the circle's radius).
We need to figure out two things: R (the radius), and theta (the angle at O from A to B).
To find R, we first imagine drawing a right triangle between A, M, and C, such that the angle at M from A to C is 90 degrees.
We already know that line AM is 128, and that line MC is 32. And with respect to the angle at C from A to M, line AM is the opposite while line MC is the adjacent. So we can calculate that angle by using sohcahtoa... tangent is opposite divided by adjacent, so the tangent of that angle is AM over MC, and so the angle is the arctangent of AM over MC.
Now imagine we draw an isosceles non-right triangle between points A, C, and O. And we just calculated that the angle of C from A to O is the arctangent of AM over MC... so we also know that the angle of A from C to O is the same thing (since the triangle is isosceles), and the angle at O from A to C is 180 minus twice the arctangent of (AM over MC). This is the value we want, because if we just double that, we have our theta.
Now we just need to know R... which we can get with some more sohcahtoa. We draw a right triangle between A, M, and O, such that the angle at M from A to O is 90 degrees. And we already have the angle at O from A to M (it's 180 minus twice the arctangent of (AM over MC)). So with regard to the angle at O, AO is the hypotenuse, OM is the adjacent, and AM is the opposite. Sine is the opposite over the hypotenuse, and the opposite is 128, so the sine of (180 minus twice the arctangent of (AM over MC)) is equal to 128 over the hypotenuse, i.e. hypotenuse is equal to 128 over the sine of (180 minus twice the arctangent of (AM over MC)). Thus,
theta is roughly 56.144974 degrees, and
R is perhaps 272.
With these values, you can do the movement. Let's see...
Code:
// create event:
theta = 0; // some value between 0 (point A) and 56.144974 (point B)
spd = 1; // how quickly you want the instance to move
#macro CURVE_WIDTH 256
#macro CURVE_HEIGHT 32
#macro CIRCLE_THETA 2*(180-(2*(darctan((CURVE_WIDTH/2)/CURVE_HEIGHT)))) // should be roughly 56.144974 here
#macro CIRCLE_R (CURVE_WIDTH/2)/(dsin(CIRCLE_THETA/2)) // should be around 272
#macro OFFSET 270-(CIRCLE_THETA/2) // controls the curve's position/rotation
Code:
// step event:
theta = max(0,min((theta+(spd*((keyboard_check(vk_left)-keyboard_check(vk_right))),CIRCLE_THETA)); // user input
var o_x = (point_a.x+(CURVE_WIDTH/2)); // the circle's origin's x coordinate
var o_y = ((point_a.y+CURVE_AMOUNT)-CIRCLE_R); // the circle's origin's y coordinate
x = o_x + lengthdir_x(CIRCLE_R,(theta+OFFSET));
y = o_y + lengthdir_y(CIRCLE_R,(theta+OFFSET));
Note: I haven't tested any of this.
edit - I've edited the code to make it more adjustable / less hard-coded