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:
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:
- Thank you TDS for helping me figure this out!
View attachment PresetAnimations.js
本贴来自国际rpgmaker官方论坛作者:Archeia处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:
https://forums.rpgmakerweb.com/threads/using-patterns-for-animating-events.71011/