No, it's pretty much that awkward in 2.x, and not a whole lot better in 3.x.
You can use AutoHotKey to automate movement a bit, and make it less awkward.
Here's a script which you can use in 2.x, where you press SHIFT+1 through SHIFT+8 to thrust back and forth at varying depths and speeds. Probably can't actually do anything useful past SHIFT+4:
Code:
thrusting := 0
return
+1::
in_time := 225
out_time := 150
stroke_delay := 500
Gosub, ToggleThrusting
return
+2::
in_time := 350
out_time := 240
stroke_delay := 50
Gosub, ToggleThrusting
return
+3::
in_time := 300
out_time := 200
stroke_delay := 500
Gosub, ToggleThrusting
return
+4::
in_time := 375
out_time := 290
stroke_delay := 50
Gosub, ToggleThrusting
return
+5::
in_time := 350
out_time := 250
stroke_delay := 500
Gosub, ToggleThrusting
return
+6::
in_time := 400
out_time := 340
stroke_delay := 50
Gosub, ToggleThrusting
return
+7::
in_time := 400
out_time := 300
stroke_delay := 500
Gosub, ToggleThrusting
return
+8::
in_time := 450
out_time := 350
stroke_delay := 50
Gosub, ToggleThrusting
return
ToggleThrusting:
stroke_time := (in_time + out_time + (stroke_delay * 2) + 10)
if (thrusting)
{
SetTimer, Thrust, Off
}
else
{
SetTimer, Thrust, %stroke_time%
Gosub, Thrust
}
thrusting := !thrusting
return
Thrust:
Send {up down}
Sleep in_time
Send {up up}
Sleep stroke_delay
Send {down down}
Sleep out_time
Send {down up}
Sleep stroke_delay
return
Here's the script for use with 3.x, which has different movement timings:
Code:
thrusting := 0
return
+1::
in_time := 175
out_time := 100
stroke_delay := 500
Gosub, ToggleThrusting
return
+2::
in_time := 215
out_time := 125
stroke_delay := 150
Gosub, ToggleThrusting
return
+3::
in_time := 225
out_time := 150
stroke_delay := 500
Gosub, ToggleThrusting
return
+4::
in_time := 275
out_time := 150
stroke_delay := 150
Gosub, ToggleThrusting
return
+5::
in_time := 275
out_time := 200
stroke_delay := 500
Gosub, ToggleThrusting
return
+6::
in_time := 325
out_time := 200
stroke_delay := 150
Gosub, ToggleThrusting
return
+7::
in_time := 325
out_time := 250
stroke_delay := 500
Gosub, ToggleThrusting
return
+8::
in_time := 365
out_time := 250
stroke_delay := 150
Gosub, ToggleThrusting
return
+9::
in_time := 375
out_time := 300
stroke_delay := 500
Gosub, ToggleThrusting
return
+0::
in_time := 415
out_time := 275
stroke_delay := 150
Gosub, ToggleThrusting
return
ToggleThrusting:
stroke_time := (in_time + out_time + (stroke_delay * 2) + 10)
if (thrusting)
{
SetTimer, Thrust, Off
}
else
{
SetTimer, Thrust, %stroke_time%
Gosub, Thrust
}
thrusting := !thrusting
return
Thrust:
Send {up down}
Sleep in_time
Send {up up}
Sleep stroke_delay
Send {down down}
Sleep out_time
Send {down up}
Sleep stroke_delay
return
You might consider changing "up" and "down" in the bottom section to your movement keys. So if you're using the abysmal WASD, change the Send commands with a first word of "up" to a first word of "w", and the ones with "down" as the first word to "s" as the first word. This allows thrusting to continue working when the cursor is in grab mode, whereas otherwise the arrow keys stop working.