Looking really good, SirCrow!
If I'm allowed one suggestion: please consider using _KEYDOWN for arrow movement. Using INKEY$ doesn't allow natural movement as a key only starts repeating in the buffer after a few milliseconds, which causes the ship to bump in the desired direction once and only then actually start accelerating or rotating.
It doesn't have to be like this, but here's my suggested change, for natural movement (may feel a bit too fast since you're used to the current approach):
K$ = INKEY$: IF INSTR("abcdefghijklmnopqrstuvwxyz", K$) THEN K$ = UCASE$(K$)
IF _KEYDOWN(19200) THEN GOTO TurnLeft
IF _KEYDOWN(19712) THEN GOTO TurnRight
IF _KEYDOWN(18432) THEN GOTO Accelerate
IF _KEYDOWN(20480) THEN GOTO SlowDown
SELECT CASE K$ '= = = = = = = = = = = = = = = = = W H A T K E Y ? = = = = = = = = = = = = = = = = = = =
'Ship's Orientation...
CASE "6"
TurnLeft:
Angle = Angle - 5: IF Angle < 5 THEN Angle = 360 'Anti-Clockwise
CASE "4"
TurnRight:
Angle = Angle + 5: IF Angle > 360 THEN Angle = 5 'Clockwise
'CHR$(0) + CHR$(71) [Home] "G"
'CHR$(0) + CHR$(72) [Up Arrow] "H"
'CHR$(0) + CHR$(73) [Page Up] "I"
'CHR$(0) + CHR$(75) [Left Arrow] "K"
'CHR$(0) + CHR$(76) [5 on NumPad] "L" (NumLock off in QB64)
'CHR$(0) + CHR$(77) [Right Arrow] "M"
'CHR$(0) + CHR$(79) [End] "O"
'CHR$(0) + CHR$(80) [Down Arrow] "P"
'CHR$(0) + CHR$(81) [Page Down] "Q"
'CHR$(0) + CHR$(82) [Insert] "R"
'CHR$(0) + CHR$(83) [Delete] "S"
'(Jump (Ctrl-End) to BOTTOM for full version of list above.)
CASE "8" 'Ship Accelerates
Accelerate:
IF Ang = Last.Ang THEN IF ABS(Step_X) = MaxSpeed OR ABS(Step_Y) = MaxSpeed GOTO Skip.Speed
Last.Ang = Ang '* * * * WHERE to put this? * * * *
Inc = ABS(Inc): CALL Ship_Speed 'Accelerate
'Above: Restore Inc to + in case MOUSE wheel has put Ship in reverse
Skip.Speed:
CASE "2" 'Ship Slows or Stops
SlowDown:
IF Step_X <> 0 OR Step_Y <> 0 THEN CALL Ship_Slow
CASE "5", CHR$(0) + "L", CHR$(0) + "": Angle = 360 'Point Ship straight UP (5, Ctrl-UP)
CASE CHR$(0) + "s": Angle = 90 ' Point Ship LEFT (Ctrl + Arrow)
CASE CHR$(0) + "t": Angle = 270 'Point Ship RIGHT
CASE CHR$(0) + "‘": Angle = 180 'Point Ship DOWN
CASE "7": Angle = 45 'Point Ship UP-LEFT (NumPad Corners)
CASE "9": Angle = 315 'UP-RIGHT
CASE "1": Angle = 135 'DOWN-LEFT
CASE "3": Angle = 225 'DOWN-RIGHT
CASE CHR$(32), "X", "C": IF TIMER - LastProj > PRate THEN CALL Fire_Laser(PCnt, PX(), PY(), Dist()) 'Fire a LaserBall (but not too rapidly)
CASE CHR$(0) + "?", "S", "D", "F", "G" 'F5 = Proximity Bomb * * * * Ctrl + "?" / CHR$(63)
'IF Energy = 100 AND Shield.Up = 5 THEN * * * * THIS line or below? * * * *
IF Energy >= 80 AND Shield.Up > 3 THEN
CALL Check_Proximity
IF Objects.Hit THEN
Energy = Energy - 10: FRad = ObRad + 20 'Initial size of Flash
PB.Bonus = Objects.Hit * 100 * Objects.Hit:: Score = Score + PB.Bonus
END IF
END IF
CASE CHR$(13): IF NOT Super.Obj THEN CALL Jump_Ship(XX, YY, Ship.Vanished) ' Ship.Vanished = -1:: SOUND 3333, .5 '* * * * DELETE Vanished or not?
CASE CHR$(19): SWAP Snd, NoSnd: SOUND 222, 3: IF Snd THEN SOUND 333, 1 ELSE SOUND 111, 1
CASE CHR$(27): SYSTEM
END SELECT 'What Key? = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =