Well the "Invisible Rocking Reference Objects" will do the trick too...you just need to add a script to the Boat like this:
ObjectReference property RockLeft Auto ; Select the "Left" orientation referenceObjectReference property RockCenter Auto ; Select the "Center" orientation referenceObjectReference property RockRight Auto ; Select the "Right" rock orientation referencebool Property Left=False Auto ; Are we rocking to the left?bool Property Center = True ; Are we at our center position?bool Property Rocking=False AutoSound property RockSound Auto ; What sound to play when starting to rock?float Property RotateCap=1.0 Auto ; Set based on ship size.Function TranslateChoice() ; Picks a node and starts rotation, setting the booleans appropriately. if Left ; Going left if Center ; We're at the center point. Center = False Left = False TranslateToRef(RockLeft,1.0,RotateCap) else Center = True TranslateToRef(RockCenter,1.0,RotateCap) endif else ; Going Right if Center ; We're at the center point. Center = False Left = True TranslateToRef(RockRight,1.0,RotateCap) else Center = True TranslateToRef(RockCenter,1.0,RotateCap) endif endifEndFunctionevent OnActivate() ; Have something activate the boat to start it rocking. It will go Right first. if GetDistance(RockLeft) != 0.0 RockLeft.MoveTo(Self,0.0,0.0,0.0,False) ; Move it to us, but don't rotate it. endif if GetDistance(RockCenter) != 0.0 RockCenter.MoveTo(Self,0.0,0.0,0.0,True) ; Move it to us, and rotate it. Center reference saves our "Start" position. endif if GetDistance(RockRight) != 0.0 RockRight.MoveTo(Self,0.0,0.0,0.0,False) ; Move it to us, but don't rotate it. endif if !Rocking ; Start Rocking Rocking = True TranslateChoice() else ; Stop Rocking Rocking = False endifEndEventEvent OnTranslationComplete() if Rocking RockSound.Play(Self) ; Wood creaking sound or water splashing or whatever sound to use for rocking. TranslateChoice() endifEndEvent