Yeah, and it also occured to me that falling off a cliff will work a little weird (you can jump if the last jump wasn't a double jump, but not otherwise - probably not what anyone wants). So, here's what should work even better:
Dim nJumpTimes
Sub Player_OnControllerMove(OldActions, NewActions)
With ProjectObj.GamePlayer.PlayerSprite
If (.rDef.SolidTest(.X, .Y + .Height) Or .rDef.SolidTest(.X + .Width - 1, .Y + .Height)) Or (Not .pRideOnRef Is Nothing) Then
nJumpTimes = 1 '#this is the number of times you can jump after falling off a cliff
If (Not OldActions) And NewActions And ACTION_BUTTON1 Then
.DY = - .rDef.Template.JumpHeight
nJumpTimes = 1 '#this is the number of times you can jump after jumping off the ground
End If
ElseIf nJumpTimes > 0 Then
If (Not OldActions) And NewActions And ACTION_BUTTON1 Then
.DY = - .rDef.Template.JumpHeight
nJumpTimes = nJumpTimes - 1
End If
End If
End With
End Sub
Now, there are at least three obvious modifications you can make: you can change the number of times you can jump if you fall off a cliff; you can change the number of times you can jump after a normal, grounded jump; and you can change which button you use to jump (note that you have to change BOTH the "ACTION_BUTTON1"s). If you want the up arrow to be jump, change it to "ACTION_UP". If you want two buttons, say button 1 and up, do "(ACTION_BUTTON1 Or ACTION_UP)" - the parentheses, of course, are crucial.
The number of jumps, on the other hand, should be self-explanatory - I've even added an unusual character to the beginning of the comment (#) and added whitespace around them so hopefully anyone can see where they are.
And that should take care of one of durnurd's complaints/suggestions, and an obvious flaw that I should've seen before.