Using Patterns for Animating Events

Discussion in 'RPG Maker MV Tutorials' started by Archeia, Nov 15, 2016.

  1. Archeia

    Archeia Level 99 Demi-fiend Staff Member Developer

    Messages:
    14,650
    Likes Received:
    14,409
    Location:
    Game Dev Salt Mines
    First Language:
    Filipino
    Primarily Uses:
    VNM

    Using Patterns for Animating Events
    What is this for?

    This is for animating objects by referencing their patterns instead. By default, RPG Maker resets pattern back to 1 and it's super frustrating. This is useful depending on your workflow.

    Copy the code and put it in a JS file. OR Download the attachment
    Activate in PluginManager, you can name it whatever you want.
    Read the documentation.
    Here's an example use:

    [​IMG]

    How to Use?
    Code:
    /*
    -------------------------------------------------------------------------------------------------
     # Template for Movement Commands
    -------------------------------------------------------------------------------------------------
    
    How to use:
    ----------------------------------------
    Copy and Paste the following code in this js file.
    ----------------------------------------
    Game_Interpreter.prototype.animateAnimationName = function(characterId, waitDuration) {
    
      // Define Default
      // Character ID is stated in the documentation above
      //----------------------------------------
      if (characterId === undefined) { characterId = 0; }
      // waitDuration is how fast you want the animation to play.
      //----------------------------------------
      if (waitDuration === undefined) { waitDuration = 15; }
    
      // Get Character
      this._character = this.character(characterId);
    
      // Initialize Move Route
      // Repeat = Repeat Movements
      // Skippable = Skip if Cannot Move
      // Wait = Wait for Completion
      //----------------------------------------
      var moveRoute = {list: [], repeat: false, skippable: false, wait: true};
    
      // Your move route code here.
      // Start Inserting it y'all.
    
      // Add Ending of Move Route (Needed)
      moveRoute.list.push({code: Game_Character.ROUTE_END, indent: null, parameters: []})
    
      // If Character Exists
      if (this._character) { this._character.forceMoveRoute(moveRoute); }
      // If Move Route wait flag is true
      if (moveRoute.wait) { this.setWaitMode('route') };
      return true;
    };
    ------------------------------------------------------------------------------------------------
    
    Change the function name to something you'd like. For Example:
    ----------------------------------------
    Game_Interpreter.prototype.animateAnimationName = function(characterId, waitDuration) {
    
    to
    
    Game_Interpreter.prototype.animateDancingRalph = function(characterId, waitDuration) {
    
    The new name will be the ID for the Script Call. This will be explained later.
    -------------------------------------------------------------------------------------------------
    
    Explaining Character Index and Pattern:
    ----------------------------------------
    In a character sheet you would get something like this:
    
          [ID]  [Index 1] [Index 2] [Index 3]
    [Down(2) ]  [0][1][2] [0][1][2] [0][1][2]
    [Left(4) ]  [0][1][2] [0][1][2] [0][1][2]
    [Right(6)]  [0][1][2] [0][1][2] [0][1][2]
    [Up(8)   ]  [0][1][2] [0][1][2] [0][1][2]
          [ID]  [Index 4] [Index 5] [Index 6]
    [Down(2) ]  [0][1][2] [0][1][2] [0][1][2]
    [Left(4) ]  [0][1][2] [0][1][2] [0][1][2]
    [Right(6)]  [0][1][2] [0][1][2] [0][1][2]
    [Up(8)   ]  [0][1][2] [0][1][2] [0][1][2]
    
    ID is the number of the Character row you want to reference.
    Pattern (0,1,2) is the individual frames per each direction (Up, Down, Left, Right).
    
    If you want to change the pattern of the object you want to animate, use this command:
    ----------------------------------------
    this._originalPattern = this._pattern = x;
    (With x being one of the values 0/1/2)
    
    If you want to change the graphic of the object that is set in another index, use this command:
    ----------------------------------------
    this._characterIndex = ID;
    (With ID being the index you want to reference. Make sure to refer to the chart above)
    
    If you want to change the direction, use this command:
    ----------------------------------------
    this.setDirection(ID);
    (Refer to the chart to figure out what number the direction is)
    
    If you want to use all three, it will look something like this:
    ----------------------------------------
    moveRoute.list.push({code: Game_Character.ROUTE_SCRIPT , indent: null, parameters: [
    'this._characterIndex = 1;
    this._originalPattern = this._pattern = 0;
    this.setDirection(4)']});
    
    -------------------------------------------------------------------------------------------------
    Use the Script Call event command. Not inside a move route. The name will depend on the function name
    you have set earlier:
    
    animateAnimationName(ID, Wait)
    ----------------------------------------
     -1 is the player
      0 is the current event
      ID beyond -1 and 0 is Event ID.
    
    For example:
    Script call animateAnimationName(0, 15)
    -----------------------------------------------------------------------------------------------*/
    
    /*-----------------------------------------------------------------------------------------------
     Example Animation Presets
     -----------------------------------------------------------------------------------------------*/
    
    /*-----------------------------------------------------------------------------------------------
     Animate Door -- Opening
     Script call animateOpenDoor(0, 15)
    -----------------------------------------------------------------------------------------------*/
    Game_Interpreter.prototype.animateOpenDoor = function(characterId, waitDuration) {
    
      // Define Default
      // Character ID is stated in the documentation above
      //----------------------------------------
      if (characterId === undefined) { characterId = 0; }
      // waitDuration is how fast you want the animation to play.
      //----------------------------------------
      if (waitDuration === undefined) { waitDuration = 15; }
    
      // Get Character
      this._character = this.character(characterId);
    
      // Initialize Move Route
      // Repeat = Repeat Movements
      // Skippable = Skip if Cannot Move
      // Wait = Wait for Completion
      //----------------------------------------
      var moveRoute = {list: [], repeat: false, skippable: false, wait: true};
    
      // Your move route code here.
        moveRoute.list.push({code: Game_Character.ROUTE_SCRIPT, indent: null, parameters: ['this._originalPattern = this._pattern = 0;']});
        moveRoute.list.push({code: Game_Character.ROUTE_WAIT, indent: null, parameters: [waitDuration]});
    
        moveRoute.list.push({code: Game_Character.ROUTE_SCRIPT , indent: null, parameters: ['this._originalPattern = this._pattern = 1;']});
        moveRoute.list.push({code: Game_Character.ROUTE_WAIT, indent: null, parameters: [waitDuration]});
    
        moveRoute.list.push({code: Game_Character.ROUTE_SCRIPT , indent: null, parameters: ['this._originalPattern = this._pattern = 2;']});
        moveRoute.list.push({code: Game_Character.ROUTE_WAIT, indent: null, parameters: [waitDuration]});
    
    
        moveRoute.list.push({code: Game_Character.ROUTE_SCRIPT , indent: null, parameters: ['this._originalPattern = this._pattern = 0; this.setDirection(4)']});
        moveRoute.list.push({code: Game_Character.ROUTE_WAIT, indent: null, parameters: [waitDuration]});
    
        moveRoute.list.push({code: Game_Character.ROUTE_SCRIPT , indent: null, parameters: ['this._originalPattern = this._pattern = 1;']});
        moveRoute.list.push({code: Game_Character.ROUTE_WAIT, indent: null, parameters: [waitDuration]});
    
        moveRoute.list.push({code: Game_Character.ROUTE_SCRIPT , indent: null, parameters: ['this._originalPattern = this._pattern = 2;']});
        moveRoute.list.push({code: Game_Character.ROUTE_WAIT, indent: null, parameters: [waitDuration]});
    
      // Add Ending of Move Route (Needed)
        moveRoute.list.push({code: Game_Character.ROUTE_END, indent: null, parameters: []})
    
      // If Character Exists
      if (this._character) { this._character.forceMoveRoute(moveRoute); }
    
      // If Move Route wait flag is true
      if (moveRoute.wait) { this.setWaitMode('route') };
      return true;
    };
    

    Why won't you use event commands instead?

    By default, RPG Maker resets pattern back to 1. Making the following commands unusable:
    [​IMG]

    - Thank you TDS for helping me figure this out!

    View attachment PresetAnimations.js
     
    Last edited: Sep 11, 2017
    #1
    Kyuukon, Eliaquim, djDarkX and 6 others like this.
  2. nio kasgami

    nio kasgami VampCat Veteran

    Messages:
    8,600
    Likes Received:
    2,359
    Location:
    Canada / Quebec
    First Language:
    French
    Oh nice premade custom move route!


    Might I extend it with custom move command :p?
     
    #2
  3. Archeia

    Archeia Level 99 Demi-fiend Staff Member Developer

    Messages:
    14,650
    Likes Received:
    14,409
    Location:
    Game Dev Salt Mines
    First Language:
    Filipino
    Primarily Uses:
    VNM


    It uses move route by default and if they know coding they can do it lol. (Or use @Galv's or whoever's movement code script instead)


    But if you want to, sure.
     
    #3
  4. nio kasgami

    nio kasgami VampCat Veteran

    Messages:
    8,600
    Likes Received:
    2,359
    Location:
    Canada / Quebec
    First Language:
    French
    lol nan I tend to dislike using other peoples plugins but yours is kinda really nice and I feel to invest some time on it haha
     
    #4
  5. Faye Valentine

    Faye Valentine The Mapgician Veteran

    Messages:
    472
    Likes Received:
    429
    Location:
    Venezuela
    First Language:
    Spanish
    Primarily Uses:
    RMVXA
    What a useful script/plugin. I was going to ask you, would you give me permission to translate the documentation to spanish and redistribute the script to hispanic communities (crediting you), or should I just redirect them here instead?


    Thanks =)
     
    #5
    Archeia likes this.
  6. Archeia

    Archeia Level 99 Demi-fiend Staff Member Developer

    Messages:
    14,650
    Likes Received:
    14,409
    Location:
    Game Dev Salt Mines
    First Language:
    Filipino
    Primarily Uses:
    VNM


    Go ahead. 'w')b
     
    #6
    Faye Valentine likes this.
  7. Eliaquim

    Eliaquim Raze: The Rakuen Zero's Guardian! Veteran

    Messages:
    856
    Likes Received:
    332
    Location:
    Brazil - Rio de Janeiro
    First Language:
    Portuguese - Br
    Primarily Uses:
    RMMV
    Dont know if i understand it very well...
    I just have to put this plugin in my project, then i can use the commands in a script call (using move route script call)?
    Or do i have to make some setup inside the plugin file?
     
    #7
  8. Eliaquim

    Eliaquim Raze: The Rakuen Zero's Guardian! Veteran

    Messages:
    856
    Likes Received:
    332
    Location:
    Brazil - Rio de Janeiro
    First Language:
    Portuguese - Br
    Primarily Uses:
    RMMV
    Hi!
    I try to make this work, but no sucess. I will post here some imagems for someone who try to help me.
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    I'm trying to use the INDEX NÂș 4 to do the animation in the third image(player). But can't get it to work :(

    In the part:
    I try to change to:
    And:
    But, dont work =/
     
    #8

Share This Page