Apologies for the poor quality gif, couldn't get ShadowPlay to work:
Credit to codmoddd1234 who sent me the bulk of this stuff, I adapted it into a tutorial with his permission.
Step 1
Right click in Radiant, go to script > vehicle. Give it the following key-value pairs: You can use any xmodel. The rubber_raft vehicletype allegedly makes better curves, according to codmoddd.
Step 2
Right click in Radiant, go to info > vehicle > node_rotate. The node_rotate means the vehicle will follow a curve; if you want straight lines, select node instead of node_rotate, you can also use combinations of both. Deselect everything. Select the vehicle, then the node_rotate, then press W to connect them.
Give it the following key-value pairs: Play around with the speed and lookahead settings later as you wish.
Step 3
Place another node_rotate or node (or copy previous one, but if you copy it remember to remove spawnflags KVP from new nodes). Deselect everything, select the first node, then the new node, press W to connect.
Repeat this step until you have the path you want. As you place new nodes, you will see a red curve appear between the first and last nodes (select any node to see it). This is the path the vehicle will follow.
Step 4
Make a new script, call it setupvehicles.gsc, with this code:
With regards to the above script...
I don't actually know how much of this is needed, but just to be on the safe side I've included everything codmoddd included.
In your mapname.gsc, BEFORE the line maps\_zombiemode::main();, add:
Step 5
Add this function at the bottom of your mapname.gsc:
IMPORTANT: While testing this I had launch_boat() set to start whenever I press P, by using BluntStuffy's tutorial here. When including it in a map properly, you will need to either: add a line such as thread launch_boat(); after zombiemode::main() is called, or add a function that wait for a trigger then remove the while loop, or waits for some other event... you get the idea - this is a basic function for you to modify, not a drag-and-drop feature.
Step 6
Add this to your mapname_patch.csv:
Step 7
Compile, build mod after ticking new things (e.g. script), run game.