Not sure if this could give you any ideas but I have a move for Samus that floats and I use
;-----------taken from [shinat]'s storm------------------------------------------
;-[ Floating ]-
[State -2, a]
type = VarSet
trigger1 = Pos Y < 0
trigger1 = Vel Y >= 2.5
trigger1 = command = "Float"
var(11) = 1
[State -2, b]
type = VarSet
trigger1 = command = "Drop"
trigger2 = StateType != A
trigger3 = Movetype = H
var(11) = 0
[State -2, c]
type = VelSet
trigger1 = var(11)
trigger1 = MoveType != H
trigger1 = Vel Y >= 2.5
y = 2.5
[State -2, d]
type = CtrlSet
trigger1 = PrevStateNo = [600,699]
trigger1 = var(11)
;trigger1 = !var(12)
value = 0
persistent = 0
[State 50, VelAdd]
type = VelAdd
triggerall = Vel X < 8.6
;triggerall = var(12)
triggerall = command = "holdfwd"
triggerall = command != "holdback"
trigger1 = StateNo = 50
trigger2 = StateNo = [600,699]
trigger3 = StateNo = [7000,7003]
x = 1.55;const(velocity.walk.fwd.x)
[State 50, VelAdd]
type = VelAdd
triggerall = Vel X > -8.6
;triggerall = var(12)
triggerall = command != "holdfwd"
triggerall = command = "holdback"
trigger1 = StateNo = 50
trigger2 = StateNo = [600,699]
trigger3 = StateNo = [7000,7003]
x = -1.55;const(velocity.walk.fwd.x)*-1
[State 50, VelSet]
type = VelSet
triggerall = command != "holdfwd"
triggerall = command = "holdback"
trigger1 = StateNo = 50
trigger1 = Vel X < -8.6
trigger2 = StateNo = [7000,7003]
x = -8.6
[State 50, VelSet]
type = VelSet
triggerall = Vel X > 8.6
triggerall = command = "holdfwd"
triggerall = command != "holdback"
trigger1 = StateNo = 50
trigger2 = StateNo = [7000,7003]
x = 8.6
;---------------------------------------------------------------------------