Here I made a quick and easy caterpillar system in RPG Maker 2003 through events (and it could probably be adapted for XP and VX) and decided to share it with you guys since I noticed people have trouble making one of these things, I hope I typed it out correctly, I double checked my event with what I typed and didn't see any typos but you never know.
Be sure at the start of every map before the screen fades in you set the party members to the player's X and Y coordinates. This is only for two party members (counting the main hero itself) but with a little tweaking and copying of the code, you can do it for as many members as you want. Party order will not work with this code as well, the party members will always show up in the order you put them in, in the caterpillar system itself...
Also, other events will be able to walk through the party members but meh, if you turn off the phasing mode crap, then you can't walk onto the tiles the second party member is on and could eventually become trapped if you have like 5 or 6 party members. This event has to be a parallel process, and the "Member2" event who follows the hero around doesn't have to be anything in particular. Also, it's a good idea to have the second party member be event 1 on every map you want it to appear on for compatibility reasons. To make the hero not show up when he/she is not present in the party, just make a precondition that states that hero has to be in the party for the member2 event.
Also in the same event that sets the member2 position to the hero's X and Y coordinates, be sure to set PM2X and PM2Y to the hero's coordinates or else member2 will take a step suddenly when you enter a new map.
<>Branch if Switch [Hero Steps] is ON
<>Branch if Var [PM2X] is V[HeroX] Equal
<>Branch if Var [PM2Y] is V[HeroY] Equal
<>Switch Operation [Caterpillarposition] OFF
<>
: Else Handler
<>Switch Operation: [Caterpillarposition] ON
<>
: End
<>
: Else Handler
<>Switch Operation [Caterpillarposition] ON
<>
: End
<>
: Else Handler
<>Switch Operation: [Caterpillarposition] OFF
<>
:End
<>Branch if Switch [Caterpillarposition] is ON
<>Variable Oper: [PM2X] Set, Member2 X Coord.
<>Variable Oper: [PM2Y] Set, Member2 Y Coord.
<>Variable Oper: [HerocaterpillarX] Set, Hero X Coord.
<>Variable Oper: [HerocaterpillarY] Set, Hero Y Coord.
<>Branch if Hero Up Facing
<>Variable Oper: [HerocaterpillarY] + , 1
<>
: End
<>Branch if Hero Right Facing
<>Variable Oper: [HerocaterpillarX] - , 1
<>
: End
<>Branch if Hero Down Facing
<>Variable Oper: [HerocaterpillarY] - , 1
<>
: End
<>Branch if Hero Left Facing
<>Variable Oper: [HerocaterpillarX] + , 1
<>
: End
<>Branch if Var [PM2Y] is V[HerocaterpillarY] Less
<>Move Event: Member2, Phasing Mode ON, Move Down
<>
: End
<>Branch if Var [PM2Y] is V[HerocaterpillarY] Greater
<>Move Event: Member2, Phasing Mode ON, Move Up
<>
: End
<>Branch if Var [PM2X] is V[HerocaterpillarX] Less
<>Move Event: Member2, Phasing Mode ON, Move Right
<>
: End
<>Branch if Var [PM2X] is V[HerocaterpillarX] Greater
<>Move Event: Member2, Phasing Mode ON, Move Left
<>
: End
<>
: End
<>Wait: 0.0 Sec
<>