Thanks Auger, that did the trick. The other technique I used which make the whole thing workable was to record the angle that the boat was heading toward and construct a series of if/then's to invoke a series of proper (Vx, Vy) settings that effectively gave me up, down, left, right, and up-right, up-left, down-right, down-left propulsion directions.
Here's the code snippet:
case 103 ` **** Propulsion of Ship (rightButtonSpriteID)
angle# = GetSpriteAngle(shipSpriteID)
SetSpriteAngle(shipSpriteID, angle#)
ship_x# = GetSpriteX(shipSpriteID) ` Top
ship_y# = GetSpriteY(shipSpriteID) ` Left
ship_width# = GetSpriteWidth(shipSpriteID)` Width Offset
ship_height# = GetSpriteHeight(shipSpriteID)` Height Offset
ship_abs_ctr_x# = ship_x#+ship_width#/2.0 ` Absolute Center X
ship_abs_ctr_y# = ship_y#+ship_height#/2.0 ` Absolute Center Y
ship_half_length# = ship_width#/2.0 ` Length of 1/2 ship
` Note: using (-ship_half_length#) puts the propulsion marker on the tail of the ship, using (+ship_half_length#) would put it at the front.
// SetSpritePosition(ballSpriteID, -ship_half_length#*(Cos(angle#))+ship_abs_ctr_x#, -ship_half_length#*(Sin(angle#))+ship_abs_ctr_y#)
if angle# < -70 and angle# > -135 ` Up
vx = 0,
vy = -300
endif
if angle# > 70 and angle# < 130 ` Down
vx = 0,
vy = 300
endif
if angle# > 150 and angle# > -150 ` Left
vx = -300,
vy = 0
endif
if angle# > -45 and angle# < 45 ` Right
vx = 300,
vy = 0
endif
if angle# <= -45 and angle# >= -70 ` Up-N-Right
vx = 300,
vy = -300
endif
if angle# <= -130 and angle# >= -180 ` Up-N-Left
vx = -300,
vy = -300
endif
if angle# <= 90 and angle# >= 45 ` Down-N-Right
vx = 300,
vy = 300
endif
if angle# <= 180 and angle# >= 90 ` Down-N-Left
vx = -300,
vy = 300
endif
SetSpritePhysicsImpulse(shipSpriteID, -ship_half_length#*(Cos(angle#))+ship_abs_ctr_x#, -ship_half_length#*(Sin(angle#))+ship_abs_ctr_y#,vx, vy)
endcase
----
From the Desk of Prof Versaggi ...