The RPG Maker Resource Kit

RMRK RPG Maker Creation => XP => XP Tutorials => Topic started by: Arkbennett on August 19, 2007, 05:38:55 AM

Title: Catapiller Script
Post by: Arkbennett on August 19, 2007, 05:38:55 AM
Can you say, "Follow the leader"?
Well, now we're going to discuss the basic element for a catapiller script - A code that makes other events follow the player.. There are more advanced ways to do it, but that's for you to explore.
Q.So why do an event version when I can just use an RGSS script?
A. An eventing version is much more managable for special cutscenes or parts in your game, well, for non-scriptors anyway..

Here's the crackdown, I'll display the script, then explain what each command does, after all, eventing is like a whole 'nother language.

Basic Catapiller Script:
Code: [Select]
<>Variable: [0001: Player X] = Player X Coords
<>Variable: [0002: Player Y] = Player Y Coords
<>Variable: [0003: Follower 1 X] = This Event X Coords
<>Variable: [0004: Follower 1 Y] = This Event Y Coords
Code: [Select]
<>Conditional Branch: Variable [0001: Player X] > Variable [0003: Follower 1 X]
  <>Move Event:: This Event
  :                     : <>Move Right
<>
End
<>Conditional Branch: Variable [0001: Player X] < Variable [0003: Follower 1 X]
  <>Move Event:: This Event
  :                     : <>Move Left
<>
End
<>Conditional Branch: Variable [0001: Player Y] > Variable [0003: Follower 1 Y]
  <>Move Event:: This Event
  :                     : <>Move Down
<>
End
<>Conditional Branch: Variable [0001: Player Y] < Variable [0003: Follower 1 Y]
  <>Move Event:: This Event
  :                     : <>Move Up
<>
End

I know what your thinking,
"OMG great, sexy, intellectual, cunning, amazing and compassionate teacher Arkbennett, I just don't understand what all those bigs words like 'variable' even mean!"
I know, it's a dreaded fate not to understand, so, let's delve deeper into it, shall we?

First off, typically your going to put this in a reguler event on the map, but you could use it through a common event, but let's not get into that now. Your going to start a new event on the map, name it whatever you want. Your going to set it as a parallel event, I typically set the speed to fast and the frequency to higher. And yes, this coding will go inside the event that you want to follow the player.

Now, you see that I split the code, the first portion is going to be part 1, the second; part 2.
The first part is the variable set up. This is where your going to save both the X and Y  of the player and the followers coordinates. You should have some knowledge of variables, so we won't delve to deep in it.
Part 2 is the Conditional Branch, this determines which way the follower should go.
It's pretty simple, RMXP's coordinate setup is similer to Quandrant IVs in math (0 starts in the top left) and the X increases as you move right, and the Y increases as you move down. So, for the first conditional branch,

Code: [Select]
<>Conditional Branch: Variable [0001: Player X] > Variable [0003: Follower 1 X]
  <>Move Event:: This Event
  :                     : <>Move Right
<>
End

It's saying, if Player's X coordinate is greater than Follower 1's X, Move Right. Easy peasy, right? Now, if you wanted to add more followers, Make follower 2 follow follower 1, follower 3 follows follower 2, and so on and so forth.

I'd suggest putting follower 2 variables and Conditional Branchs in the event that will be follower 2. The same with 3 and 4 and so on.
So as an example, follower 2 would look like this..

Code: [Select]
<>Variable: [0005: Follower 2 X] = This Event X Coords
<>Variable: [0006: Follower 2 Y] = This Event Y Coords
Code: [Select]
<>Conditional Branch: Variable [0003: Follower 1 X] > Variable [0005: Follower 2 X]
  <>Move Event:: This Event
  :                     : <>Move Right
<>
End
<>Conditional Branch: Variable [0003: Follower 1 X] < Variable [0005: Follower 2 X]
  <>Move Event:: This Event
  :                     : <>Move Left
<>
End
<>Conditional Branch: Variable [0004: Follower 1 Y] > Variable [0006: Follower 2 Y]
  <>Move Event:: This Event
  :                     : <>Move Down
<>
End
<>Conditional Branch: Variable [0004: Follower 1 Y] < Variable [0006: Follower 2 Y]
  <>Move Event:: This Event
  :                     : <>Move Up
<>
End

Alrighty, I think I got the basic element down of the catapiller script, so, if you have any questions or are confused in any way, please heistate to ask. Just joking go ahead and ask!
Title: Re: Catapiller Script
Post by: modern algebra on August 19, 2007, 06:09:03 AM
Seems pretty nice.

I'll move it to the TD, but just as a suggestion, to reduce stress on the system, it might be a good idea to do two things:

First, combine all the events for each member of the party into one parallel process event. The downside to this is, of course, that you cannot directly copy & paste the event, you will need to make sure it controls the right events for that map.

Second, put the conditional branches into Else Conditions. I.e., instead of running all four conditional branches every frame, write it like this:

<>Conditional Branch: Variable [0001: Player X] != Variable [0003: Follower 1 X]
  <>Conditional Branch: Variable [0001: Player X] > Variable [0003: Follower 1 X]
  <>Move Event:: This Event
      :                     : <>Move Right
  <>
    Else
      <>Move Event:: This Event
       :                     : <>Move Left
      <>
    End
Else
  <>Conditional Branch: Variable [0001: Player Y] > Variable [0003: Follower 1 Y]
  <>Move Event:: This Event
      :                     : <>Move Down
  <>
    Else
      <>Move Event:: This Event
       :                     : <>Move Up
      <>
    End
END


Also, it would be a good idea to mention that the events you are using as the followers chould be checked as Through, so you can't get trapped in corners.


All in all, an effective and useful tutorial. Nice job.

Title: Re: Catapiller Script
Post by: Arkbennett on August 19, 2007, 06:16:10 AM
Your absolutely right, but the time I wrote this I didn't know that.
The whole time I've been eventing RPG Maker, I didn't use else case very much until recently with my percentage formula when my seperate conditonal branchs are lagging up the game.

So I used else case and voila, worked like a charm!
Thank you for the correction.

Edit:
Quote
Also, it would be a good idea to mention that the events you are using as the followers chould be checked as Through, so you can't get trapped in corners.


All in all, an effective and useful tutorial. Nice job.

Thank you for your kind words, the reason I didn't mention checking "Through" or "Phasing" in Xp is because the following characters will just walk inside of you and sit there.
They think it's okay to do that.
Title: Re: Catapiller Script
Post by: modern algebra on August 19, 2007, 06:24:27 AM
Sorry, I did make a mistake, unfortunately. This part:

  <>Conditional Branch: Variable [0001: Player Y] > Variable [0003: Follower 1 Y]
  <>Move Event:: This Event
      :                     : <>Move Down
  <>
    Else
      <>Move Event:: This Event
       :                     : <>Move Up
      <>
    End

Should be inside another conditional branch:

<>Conditional Branch: Variable [0001: Player Y] != Variable [0003: Follower 1 Y]

END


As well, this structure is a little strange given this:

<>Variable: [0001: Player X] = Player X Coords
<>Variable: [0002: Player Y] = Player Y Coords
<>Variable: [0003: Follower 1 X] = This Event X Coords
<>Variable: [0004: Follower 1 Y] = This Event Y Coords

Player X will be greater or lesser than Follower X or Player Y will be greater or lesser than Follower Y as long as the Follower is not on the exact same square as the player. It would be better to base the system on player position and last player position, especially if you set the follower events on through.

These are mostly suggestions, and you don't have to revise your system if you don't want to.

Oh, and 2000th post :)
Title: Re: Catapiller Script
Post by: brandonjenkins on August 19, 2007, 08:25:00 PM
can u make a demo?
Title: Re: Catapiller Script
Post by: Arkbennett on August 19, 2007, 08:43:44 PM
Sure if you'd like.
I'll make one later today.
Title: Re: Catapiller Script
Post by: brandonjenkins on August 19, 2007, 08:58:22 PM
thanx... i could really use this in my game
Title: Re: Catapiller Script
Post by: Arkbennett on August 20, 2007, 01:52:57 AM
Quote
These are mostly suggestions, and you don't have to revise your system if you don't want to.

Yeah, after going over your method I realized the same thing. Originally I just skimmed through your version looking for differences, it looked fine, then when I actually tried it I got the same problem.

Anywho, I did revise it with the "else" case, but I didn't make it all in one event, simply so you can C&P it from map to map without making any changes. Convienence.

Alrighty, well, on request by a Mr. Brandon Jenkins, here is the catapiller script. You can learn from it, or just copy and paste it into your project and it'll work like a charm. But I suggest you learn it.
Catapiller Script Demo (http://www.megaupload.com/?d=NDL06A1B)