crispigt.

Paddle paddle paddle

Rewrote paddling from scratch so the stroke is driven by where the blade is rather than just which mouse button you clicked.

The stroke input is owner-only and has a cooldown. Before a stroke goes through the server checks that the player is on the boat, that the paddle is held, and that the blade tip is in the water. If any of those fail, nothing happens. Then the stroke side comes from where the blade tip is relative to the boat, not from which button was pressed. This also handles reverse strokes, if you go for a left stroke but the blade is on the right it reads as a reverse, which is how actual paddling works.

For the force model I replaced the old camera-facing direction with the boat's hull axis (shipTransform.right in this project). Applied forward impulse at the center of mass to keep translation stable, then computed yaw torque separately from the blade lever arm. From the blade's longitudinal position on the hull I compute a zone ratio that biases the stroke between more turning and more forward thrust, so paddling near the bow or stern behaves differently. Added some extra roll torque and a small downward impulse to give the boat a bit of physical weight when you stroke.

Also fixed the player drifting off the deck. The player now tracks the ship's frame-to-frame translation delta and inherits yaw rotation from the ship each frame. It's yaw-only so the player doesn't get tilted by roll or pitch, just carried along with the turning.

I also redid the stroke animation. It goes through timed phases now, set, entry, drive, recovery, with dip, sweep, and wrist roll that I can tune. Forward and reverse strokes are mirrored rather than both starting in the same direction, so you can tell them apart.