No edit summary
No edit summary
Line 13: Line 13:


  {
  {
     "head": "head",
     "<abbr title="Tells the game which bone on the model is the head. In this case, the head bone is simply named head.">head</abbr>": "<abbr title="The bone from your model that will act as the head for the look animation that plays when a Pokémon wants to look in certain directions. Can be any other appropriate bone and not all Pokémon need to do this!">head</abbr>",
     "portraitScale": 1.65,
     "<abbr title="This property controls the size of the Pokémon in the party menu on the left side of the screen. (Tip: you can refresh your resource pack with F3 + T for quick edits.)">portraitScale</abbr>": 1.65,
     "portraitTranslation": [0, -0.6, 0],
     "<abbr title="This property controls the location of the Pokémon in the party menu on the left side of the screen. The first value moves it left or right, which is your x axis. The second value moves it up or down, which is your y axis. The third value seems to do nothing and can generally be ignored. (Tip: you can refresh your resource pack with F3 + T for quick edits.)">portraitTranslation</abbr>": [0, -0.6, 0],
     "profileScale": 1,
     "<abbr title="These refer to the full body view of the Pokémon seen in GUI, but most notably the summary UI. (Tip: you can refresh your resource pack with F3 + T for quick edits.)">profileScale</abbr>": 1,
     "profileTranslation": [0, 0.15, 0],
     "<abbr title="This property controls the location of the Pokémon seen in GUI, but most notably the summary UI. The first value moves it left or right, which is your x axis. The second value moves it up or down, which is your y axis. The third value seems to do nothing and can generally be ignored. (Tip: you can refresh your resource pack with F3 + T for quick edits.)">profileTranslation</abbr>": [0, 0.15, 0],
     "faint": "bedrock(charizard, faint, true)",
     "<abbr title="This points to the faint animation for this Pokémon. If you have no faint animation, you can delete this line. Hover over each of the following words to see what each one means.">faint</abbr>": "<abbr title="Bedrock means that its checking for animations in the bedrock folder. This is where all animations should be stored.">bedrock</abbr>(<abbr title="Charizard is the prefix of the animation name that it's looking for. The animation it should be reading is named 'charizard.animation.faint' and its looking for all animations that start with 'charizard'.">charizard</abbr>, <abbr title="Faint is the suffix of the animation that it's looking for. This is usually named after animation types. The animation it should be reading is named 'charizard.animation.faint' and its looking for all animations that start with 'charizard' and end in 'faint'">faint</abbr>, <abbr title="This true or false value determines whether or not the selected animation will overwrite all other animations. This is important if you want to prioritize this animation over all others. In this case, the faint animation will always play over any other animation when the Pokémon faints! This can prevent the faint animation from not working sometimes.">true</abbr>)",
     "cry":  "bedrock(charizard, cry)",
     "<abbr title="This points to the cry animation for this Pokémon. Cries play whenever the Pokémon is called out of the pokeball. This occurs in and out of battle.">cry</abbr>":  "<abbr title="This points towards charizard's cry animation">bedrock(charizard, cry)</abbr>",
     "poses": {
     "<abbr title="Here we are defining a list of our poses.">poses</abbr>": {
       "battle-idle": {
       "<abbr title="The name of your pose. In this case, its called 'battle-idle'. Here, we will list animations that will play when the Pokémon is in battle.">battle-idle</abbr>": {
         "poseName": "battle-idle",
         "<abbr title="Here we are defining the name of the pose.">poseName</abbr>": "<abbr title="The name of this pose is 'battle-idle'">battle-idle</abbr>",
         "transformTicks": 10,
         "<abbr title="This is transition time between animations measured in minecraft ticks. You probably won't need to mess with this.>transformTicks</abbr>": 10,
         "poseTypes": ["STAND"],
         "<abbr title="Here, we are telling the game when this animation will take place.">poseTypes</abbr>": [<abbr title="One of the pose types that will use the following animation. 'STAND - when stationary on the ground.' In the next line, we will define that the following animation will only work in battle">"STAND"</abbr>],
         "isBattle": true,
         "<abbr title="This property controls whether the animation will play during battle or not.">isBattle</abbr>": <abbr title="Setting it to true will make the following animation play only while the Pokémon is idle while it's also in battle!">true</abbr>,
         "isTouchingWater": false,
         "<abbr title="This property controls whether the animation will play while the Pokémon is in water or not.">isTouchingWater</abbr>": <abbr title="Setting it to false will prevent the following animation from playing whenever the Pokémon touches water, but only while it's also in battle! So if this Pokémon starts battle in water, it is not allowed to use this pose and its assigned animation.">false</abbr>,
         "transformedParts": [
         "transformedParts": [
           {
           {
Line 41: Line 41:
           }
           }
         ],
         ],
         "animations": ["bedrock(charizard, battle_idle)"],
         "<abbr title="Here you will list which animations will play during these poses.">animations</abbr>": ["<abbr title="The animation you are telling it to use when your Pokémon is standing, while in battle, but not touching water.">bedrock(charizard, battle_idle)</abbr>"],
         "quirks": [
         "quirks": [
           {
           {
Line 56: Line 56:
         ]
         ]
       },
       },
       "standing": {
       "<abbr title="Here we are defining the name of the pose.">standing</abbr>": {
         "poseName": "standing",
         "<abbr title="Here we are again defining the name of the pose.">poseName</abbr>": "<abbr title="The name of your pose. In this case, its called standing. The pose will control the idle animation for when the Pokémon is out of battle.">standing</abbr>",
         "transformTicks": 10,
         "<abbr title="This is transition time between animations measured in minecraft ticks. You probably won't need to mess with this.>transformTicks</abbr>": 10,
         "poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
         "<abbr title="Here, we are telling the game when this animation will take place.">poseTypes</abbr>": ["<abbr title="One of the pose types that will use the following animation. STAND - when stationary on the ground">STAND</abbr>", "<abbr title="One of the pose types that will use the following animation. NONE - when not doing anything at all">NONE</abbr>", "<abbr title="One of the pose types that will use the following animation. PORTRAIT - when in a portrait like on your party UI">PORTRAIT</abbr>", "<abbr title="One of the pose types that will use the following animation. PROFILE - when in summary screens">PROFILE</abbr>" ],
         "isBattle": false,
         "<abbr title="This property controls whether the animation will play during battle or not.">isBattle</abbr>": <abbr title="Setting it to false will prevent this animation from playing whenever the Pokémon is in battle. Setting it to false can prevent conflicts with the battle-idle pose. This one line helps separate the battle-idle from the normal idle.">false</abbr>,
         "transformedParts": [
         "transformedParts": [
           {
           {
Line 73: Line 73:
           }
           }
         ],
         ],
         "animations": [
         "<abbr title="Here you will list which animations will play during these poses.">animations</abbr>": [
           "look",
           "<abbr title="Allows the Pokémon to move its head around to observe its surroundings. You can delete this if your Pokémon doesn't have a head bone, or you just don't want them looking around.">look</abbr>",
           "bedrock(charizard, ground_idle)"
           "<abbr title="The animation you are telling it to use when your Pokémon is standing while not in battle, doing nothing, or in the mod's UI. In this case, you are telling it to use its ground idle animation.">bedrock(charizard, ground_idle)</abbr>"
         ],
         ],
         "quirks": [
         "quirks": [
Line 84: Line 84:
         ]
         ]
       },
       },
       "walking": {
       "<abbr title="Here we are defining the name of the pose.">walking</abbr>": {
         "poseName": "walking",
         "<abbr title="Here we are defining the name of the pose.">poseName</abbr>": "<abbr title="The name of your pose. In this case, its called walking">walking</abbr>",
         "poseTypes": ["WALK"],
         "<abbr title="Here, we are telling the game when this animation will take place.">poseTypes</abbr>": ["<abbr title="One of the pose types that will use the following animation. WALK - when traveling on the ground">WALK</abbr>"],
         "transformedParts": [
         "transformedParts": [
           {
           {
Line 99: Line 99:
           }
           }
         ],
         ],
         "animations": [
         "<abbr title="Here you will list which animations will play during this pose. In this case, we are listing 3 different animations that will layer over each other when they get played in game.">animations</abbr>": [
           "look",
           "<abbr title="Allows the Pokémon to move its head around to observe its surroundings. This animation has priority over head bone. This means the other 2 animations cant animated the head bone if charizard is looking at the player.">look</abbr>",
           "bedrock(charizard, ground_walk)",
           "<abbr title="This points to charizard's ground walk animation. Due to the way charizard's animations were made, this specified animation only animates the bottom half of charizard. If you do not include the matching ground idle after this, the arms of charizard will t-pose while it walks.">bedrock(charizard, ground_walk)</abbr>",
           "bedrock(charizard, ground_idle)"
           "<abbr title="This points to charizard's ground idle animation. Due to the way charizard's animations were made, this specified animation only animates the top half of charizard. Adding this animation will allow charizard's arms and wings to be animated while it walks.">bedrock(charizard, ground_idle)</abbr>"
         ],
         ],
         "quirks": [
         "quirks": [
Line 116: Line 116:


=== Advanced Poser Functions And When to Use Them ===
=== Advanced Poser Functions And When to Use Them ===
Posers can do a lot more than just assign an animation to a pose. Certain things can be tweaked in the poser to make do amazing things in the game.  
Posers can do a lot more than just assign an animation to a pose. Certain things can be tweaked in the poser to help make your Pokémon livelier in game. If you enjoy making many different animations for Pokémon, then this section will help you implement them in game. Using these advanced feature can help you make custom Pokémon that are on the same level of quality as the official Pokémon!
==== Layered Animations ====
==== Layered Animations ====
2 animations played at same time
Layered animations are two or more animations that are listed together in your <code>animations</code> list. The most common example would be adding the <code>"look"</code> animation on top of your <code>ground_idle</code> animation for your standing pose. You're able to list more than 2 animations and your main limit would be running out of bones to animate.
 
The first animation listed should have priority control over the bones of the model. This is how Pokémon are able to look at you while walking around. The look animation has priority over the head bone, or whatever bone is listed as the head. This head bone will always attempt to look at a player if the player approaches.
 
Another example of layering animations would be having 2 kinds of animations that are meant to be played together and separate. A great example of this is charizard's walk animation. The walking animation itself only moves the legs for when it's walking. It combines the ground idle and the ground walk animations for its walking pose. The walk animation only controls the bottom half of the body, while the ground idle only controls the top half of the body. If you only listed its walk animation and it started walking, then the top half of charizard would t-pose whenever it walks.</br>
Charizard's walking animation list for its walking pose:
      "animations": [
        "look",
        "bedrock(charizard, ground_walk)",
        "bedrock(charizard, ground_idle)"
        ]
</br>
 
==== Animation Overwrites ====
==== Animation Overwrites ====
True/False when listing animation
This function is mostly used for cases where you want an animation to be played exclusively for certain situations. You simply write <code>, true</code> after your animation type in your animations list. The most common case for this function would be writing it into your faint so the faint animation should always be playing when a Pokémon faints. Sometimes animations don't change properly and this can fix it most of the time.
 
Below is an example of the faint using this overwrite function. What's going to happen in game is that when charizard faints, it will always play the faint animation over other animations it was already doing. This is fine because the faint animation animates the whole model. The cry animation does not contain this function because we want the cry to play over the idle animation, but not completely overwrite everything! If it did, then charizard would t-pose whenever it tried to do it's cry animation because it only animates the head bone.</br>
 
"faint": "bedrock(charizard, faint, true)",
  "cry":  "bedrock(charizard, cry)",
</br>
 
==== Quirks ====
==== Quirks ====
short Animations that play during another animation
Quirk animations are extra animations that you can have play over the main animation list. What makes them different from the previous animation overwrite function is that these quirks can have extra properties applied to them. You can make them loop a certain number of times and include timers for these quirks. The most common example of a quirk animation would be the blink animations.
 
Making a quirk in your poser file would largely depend on an animator making these quirky little animations to play in game. You can do more than just blinking animations. You can make a Pokémon roar, sneeze, or dance and have it play as a quirk for its standing pose or any other pose. A timer can then be applied to these quirk animations so you could end up with something like charizard doing a roar every 30-60 seconds when its idle. It's a very flexible sub system for animations that is only limited by your creativity.
 
Below is an example of a modified quirk animation. What this will do is eventually make charizard play the blink animation 5 times in a row. Then after the animation plays, an 8-20 second timer begins to play this quirk again. The quirk timer starts after the quirk animations end.</br>
 
"quirks": [
        {
          "name": "blink",
          "loopTimes": 5,
          "minSecondsBetweenOccurrences": 8,
          "maxSecondsBetweenOccurrences": 20,
          "animations": ["bedrock(charizard, blink)"]
          },
</br>
 
==== Transformed Parts ====
==== Transformed Parts ====
Hide parts, change positions and rotations
This function allows you to transform parts of the model when the Pokémon is in a certain pose. You can change the location, rotation, and visibility of bones for each pose. This allows you to make some slight adjustments to an in-game animation without having to edit the animation itself. While there aren't many examples of this function, it's most common use is to hide model parts when a Pokémon is not in its battle idle. This is the case with Rillaboom and its drum.
 
A great use for location and rotation transformation is to adjust shoulder animations. You don't have to account for the model location on the player shoulder when making the animation. If it doesn't line up in the game, you can move the whole model using this function.
 
The visibility transformation allows you to hide a specific bone in the model when the Pokémon is currently in a pose. This can be used to hide certain bones if needed. This allows you to do things like making Rillaboom use its drum for its battle idle. It also allows Typhlosion to have its flames ignited only during battle. Something to keep in mind is that if you want a bone to be visible only during battle, then you must set this bone as invisible for all other poses. This is why <code>transformedParts</code> is written under every pose in the poser file breakdown.
 
Below is an example of all the transformed part properties being used. This is mostly a demonstration of your options when using this function. If this example was applied in game, Charizard's wings would be detached from its body, but only the left wing would be invisible. Realistically, you would never want to do something like that.</br>
 
"transformedParts": [
          {
            "part": "wing_right",
            "position": [10, 0, 0],
            "rotation": [0, 0, 0],
            "isVisible": true
          },
          {
            "part": "wing_left",
            "position": [-10, 0, 0],
            "rotation": [0, 0, 0],
            "isVisible": false
          }
        ]
</br>
 
==== Animation Conditions ====
==== Animation Conditions ====
isBattle or isTouchingWater true/false
This function allows you to have more control over when an animation is allowed to play. The current conditions we can use are for battle and for touching water. This can be used to make animations specific to being in battle or in water. You can also mix and match the battle and water conditions if you really want more specific animations. This can result in having a ground idle, ground battle idle, water idle, and water battle idle!
 
This function is mostly for helping you organize your animations for each pose. Setting a condition to true will only allow the animation to play when this condition is met. Setting it to false will prevent the animation from being played when this condition is met. This allows you to set 2 or more animations per <code>poseType</code>. This basic fundamental is what allows us to have battle animations that can only play in battle!
 
Transformed parts work really well with this function! Combining these 2 functions is what allows Rillaboom to use its drum only when in battle. You can allow certain model parts to appear visible only when these conditions are met. Keep these functions in mind the next time you make a custom Pokémon model. You can create livelier animations using this system!
 
Below is an example of these animation conditions being used. In this example, the battle idle will only play when charizard is in battle, but never while charizard is in water.
</br>
 
    "<abbr title="Here we are defining a list of our poses.">poses</abbr>": {
      "<abbr title="The name of your pose. In this case, its called 'battle-idle'. Here, we will list animations that will play when the Pokémon is in battle.">battle-idle</abbr>": {
        "<abbr title="Here we are defining the name of the pose.">poseName</abbr>": "<abbr title="The name of this pose is 'battle-idle'">battle-idle</abbr>",
        "<abbr title="This is transition time between animations measured in minecraft ticks. You probably won't need to mess with this.>transformTicks</abbr>": 10,
        "<abbr title="Here, we are telling the game when this animation will take place.">poseTypes</abbr>": [<abbr title="One of the pose types that will use the following animation. 'STAND - when stationary on the ground.' In the next line, we will define that the following animation will only work in battle">"STAND"</abbr>],
        "<abbr title="This property controls whether the animation will play during battle or not.">isBattle</abbr>": <abbr title="Setting it to true will make the following animation play only while the Pokémon is idle while it's also in battle!">true</abbr>,
        "<abbr title="This property controls whether the animation will play while the Pokémon is in water or not.">isTouchingWater</abbr>": <abbr title="Setting it to false will prevent the following animation from playing whenever the Pokémon touches water, but only while it's also in battle! So if this Pokémon starts battle in water, it is not allowed to use this pose and its assigned animation.">false</abbr>,
        "<abbr title="Here you will list which animations will play during these poses.">animations</abbr>": ["<abbr title="The animation you are telling it to use when your Pokémon is standing, while in battle, but not touching water.">bedrock(charizard, battle_idle)</abbr>"]
      },
</br>


=== Poser File Example ===
=== Poser File Example ===

Revision as of 11:19, 10 October 2023

Preface

The poser JSON controls all the animations of a Pokémon. It contains information on when the Pokémon will perform certain animations. You can set your Pokémon to only ever perform one animation if you’d like, or you can give it different animations for just about every action it performs! It can even be used to adjust certain properties of an animation so you don't have to edit the animation itself.

Due to the way the official models are implemented, there are no official posers for them. Poser data for custom Pokémon is often shared amongst different addon creators. Help and techniques for poser files can be found in the Cobblemon Discord server.

Poser File Breakdown

The poser file requires an animation JSON to assign animations to a model. You're always going to want to be familiar with all the animations that were made for a model. If you assign an animation type that doesn't exist in the animation JSON then the game will crash! Also, if a bone you listed in the poser doesn't exist on the model then the game will crash! Once you figure out what animations were made for your target Pokémon model, you can simply apply the existing animations to appropriate poses.

Sometimes there may be animations that don't seem to have a matching pose, such as blink animations. These can be applied using the quirk animation system. This system allows you to layer certain animations over an animation that is already playing in game. Making use of the quirk system can really help your Pokémon feel more alive!

Here is a breakdown of an example poser file which includes all the different properties that can be assigned. Hover over the underlined text to see more information. Every kind of possible poser function is included in this example at least once! So make sure that you review the whole file to see why some things are written the way they are. This example is not meant to be used as a template.

{
   "head": "head",
   "portraitScale": 1.65,
   "portraitTranslation": [0, -0.6, 0],
   "profileScale": 1,
   "profileTranslation": [0, 0.15, 0],
   "faint": "bedrock(charizard, faint, true)",
   "cry":  "bedrock(charizard, cry)",
   "poses": {
     "battle-idle": {
       "poseName": "battle-idle",
       "transformTicks": 10,
       "poseTypes": ["STAND"],
       "isBattle": true,
       "isTouchingWater": false,
       "transformedParts": [
         {
           "part": "wing_right",
           "position": [10, 0, 0],
           "rotation": [0, 0, 0],
           "isVisible": true
         },
         {
           "part": "wing_left",
           "position": [-10, 0, 0],
           "rotation": [0, 0, 0],
           "isVisible": false
         }
       ],
       "animations": ["bedrock(charizard, battle_idle)"],
       "quirks": [
         {
           "name": "blink",
           "loopTimes": 5,
           "minSecondsBetweenOccurrences": 8,
           "maxSecondsBetweenOccurrences": 20,
           "animations": ["bedrock(charizard, blink)"]
         },
         {
           "name": "wing_flap",
           "animations": ["bedrock(charizard, wing_flap)"]
         }
       ]
     },
     "standing": {
       "poseName": "standing",
       "transformTicks": 10,
       "poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE" ],
       "isBattle": false,
       "transformedParts": [
         {
           "part": "wing_right",
           "position": [0, 0, 0],
           "isVisible": true
         },
         {
           "part": "wing_left",
           "position": [0, 0, 0],
           "isVisible": true
         }
       ],
       "animations": [
         "look",
         "bedrock(charizard, ground_idle)"
       ],
       "quirks": [
         {
           "name": "blink",
           "animations": ["bedrock(charizard, blink)"]
         }
       ]
     },
     "walking": {
       "poseName": "walking",
       "poseTypes": ["WALK"],
       "transformedParts": [
         {
           "part": "wing_right",
           "position": [0, 0, 0],
           "isVisible": true
         },
         {
           "part": "wing_left",
           "position": [0, 0, 0],
           "isVisible": true
         }
       ],
       "animations": [
         "look",
         "bedrock(charizard, ground_walk)",
         "bedrock(charizard, ground_idle)"
       ],
       "quirks": [
         {
           "name": "blink",
           "animations": ["bedrock(charizard, blink)"]
         }
       ]
     }
   }
  }


Advanced Poser Functions And When to Use Them

Posers can do a lot more than just assign an animation to a pose. Certain things can be tweaked in the poser to help make your Pokémon livelier in game. If you enjoy making many different animations for Pokémon, then this section will help you implement them in game. Using these advanced feature can help you make custom Pokémon that are on the same level of quality as the official Pokémon!

Layered Animations

Layered animations are two or more animations that are listed together in your animations list. The most common example would be adding the "look" animation on top of your ground_idle animation for your standing pose. You're able to list more than 2 animations and your main limit would be running out of bones to animate.

The first animation listed should have priority control over the bones of the model. This is how Pokémon are able to look at you while walking around. The look animation has priority over the head bone, or whatever bone is listed as the head. This head bone will always attempt to look at a player if the player approaches.

Another example of layering animations would be having 2 kinds of animations that are meant to be played together and separate. A great example of this is charizard's walk animation. The walking animation itself only moves the legs for when it's walking. It combines the ground idle and the ground walk animations for its walking pose. The walk animation only controls the bottom half of the body, while the ground idle only controls the top half of the body. If you only listed its walk animation and it started walking, then the top half of charizard would t-pose whenever it walks.
Charizard's walking animation list for its walking pose:

     "animations": [
        "look",
        "bedrock(charizard, ground_walk)",
        "bedrock(charizard, ground_idle)"
       ]


Animation Overwrites

This function is mostly used for cases where you want an animation to be played exclusively for certain situations. You simply write , true after your animation type in your animations list. The most common case for this function would be writing it into your faint so the faint animation should always be playing when a Pokémon faints. Sometimes animations don't change properly and this can fix it most of the time.

Below is an example of the faint using this overwrite function. What's going to happen in game is that when charizard faints, it will always play the faint animation over other animations it was already doing. This is fine because the faint animation animates the whole model. The cry animation does not contain this function because we want the cry to play over the idle animation, but not completely overwrite everything! If it did, then charizard would t-pose whenever it tried to do it's cry animation because it only animates the head bone.

"faint": "bedrock(charizard, faint, true)",
  "cry":  "bedrock(charizard, cry)",


Quirks

Quirk animations are extra animations that you can have play over the main animation list. What makes them different from the previous animation overwrite function is that these quirks can have extra properties applied to them. You can make them loop a certain number of times and include timers for these quirks. The most common example of a quirk animation would be the blink animations.

Making a quirk in your poser file would largely depend on an animator making these quirky little animations to play in game. You can do more than just blinking animations. You can make a Pokémon roar, sneeze, or dance and have it play as a quirk for its standing pose or any other pose. A timer can then be applied to these quirk animations so you could end up with something like charizard doing a roar every 30-60 seconds when its idle. It's a very flexible sub system for animations that is only limited by your creativity.

Below is an example of a modified quirk animation. What this will do is eventually make charizard play the blink animation 5 times in a row. Then after the animation plays, an 8-20 second timer begins to play this quirk again. The quirk timer starts after the quirk animations end.

"quirks": [
        {
          "name": "blink",
          "loopTimes": 5,
          "minSecondsBetweenOccurrences": 8,
          "maxSecondsBetweenOccurrences": 20,
          "animations": ["bedrock(charizard, blink)"]
         },


Transformed Parts

This function allows you to transform parts of the model when the Pokémon is in a certain pose. You can change the location, rotation, and visibility of bones for each pose. This allows you to make some slight adjustments to an in-game animation without having to edit the animation itself. While there aren't many examples of this function, it's most common use is to hide model parts when a Pokémon is not in its battle idle. This is the case with Rillaboom and its drum.

A great use for location and rotation transformation is to adjust shoulder animations. You don't have to account for the model location on the player shoulder when making the animation. If it doesn't line up in the game, you can move the whole model using this function.

The visibility transformation allows you to hide a specific bone in the model when the Pokémon is currently in a pose. This can be used to hide certain bones if needed. This allows you to do things like making Rillaboom use its drum for its battle idle. It also allows Typhlosion to have its flames ignited only during battle. Something to keep in mind is that if you want a bone to be visible only during battle, then you must set this bone as invisible for all other poses. This is why transformedParts is written under every pose in the poser file breakdown.

Below is an example of all the transformed part properties being used. This is mostly a demonstration of your options when using this function. If this example was applied in game, Charizard's wings would be detached from its body, but only the left wing would be invisible. Realistically, you would never want to do something like that.

"transformedParts": [
         {
           "part": "wing_right",
           "position": [10, 0, 0],
           "rotation": [0, 0, 0],
           "isVisible": true
         },
         {
           "part": "wing_left",
           "position": [-10, 0, 0],
           "rotation": [0, 0, 0],
           "isVisible": false
         }
        ]


Animation Conditions

This function allows you to have more control over when an animation is allowed to play. The current conditions we can use are for battle and for touching water. This can be used to make animations specific to being in battle or in water. You can also mix and match the battle and water conditions if you really want more specific animations. This can result in having a ground idle, ground battle idle, water idle, and water battle idle!

This function is mostly for helping you organize your animations for each pose. Setting a condition to true will only allow the animation to play when this condition is met. Setting it to false will prevent the animation from being played when this condition is met. This allows you to set 2 or more animations per poseType. This basic fundamental is what allows us to have battle animations that can only play in battle!

Transformed parts work really well with this function! Combining these 2 functions is what allows Rillaboom to use its drum only when in battle. You can allow certain model parts to appear visible only when these conditions are met. Keep these functions in mind the next time you make a custom Pokémon model. You can create livelier animations using this system!

Below is an example of these animation conditions being used. In this example, the battle idle will only play when charizard is in battle, but never while charizard is in water.

    "poses": {
     "battle-idle": {
       "poseName": "battle-idle",
       "transformTicks": 10,
       "poseTypes": ["STAND"],
       "isBattle": true,
       "isTouchingWater": false,
       "animations": ["bedrock(charizard, battle_idle)"]
      },


Poser File Example

Instead of making poser files from scratch each time, you can use other custom Pokémon posers as a template. Just be aware of the animations each Pokémon has. Also be aware that some Pokémon don't use a head bone.

Here is an example of a poser file for a custom starly that includes all currently implemented poses and their appropriate animations.

  • Blink animations are not applied to the sleep pose. This is because you don't blink when you sleep!
{
 "head": "head",
 "portraitScale": 2.3,
 "portraitTranslation": [ -0.1, -0.9, 0 ],
 "profileScale": 1.1,
 "profileTranslation": [ -0.05, 0.15, 0 ],
 "faint": "bedrock(starly, faint)",
 "poses": {
   "standing": {
     "poseName": "standing",
     "transformTicks": 10,
     "poseTypes": [
       "STAND",
       "NONE",
       "PORTRAIT",
       "PROFILE"
     ],
     "animations": [
       "bedrock(starly, ground_idle)"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   },
   "walking": {
     "poseName": "walking",
     "transformTicks": 10,
     "poseTypes": [
       "WALK"
     ],
     "animations": [
       "bedrock(starly, ground_walk)"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   },
   "hovering": {
     "poseName": "hovering",
     "transformTicks": 10,
     "poseTypes": [
       "HOVER"
     ],
     "animations": [
       "bedrock(starly, air_idle)"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   },
   "flying": {
     "poseName": "flying",
     "transformTicks": 10,
     "poseTypes": [
       "FLY"
     ],
     "animations": [
       "bedrock(starly, air_fly)"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   },
   "sleeping": {
     "poseName": "sleeping",
     "transformTicks": 10,
     "poseTypes": [
       "SLEEP"
     ],
     "animations": [
       "bedrock(starly, sleep)"
     ]
   },
   "leftshoulder": {
     "poseName": "leftshoulder",
     "transformTicks": 10,
     "poseTypes": [
       "SHOULDER_LEFT"
     ],
     "animations": [
       "bedrock(starly, left_shoulder)",
       "look"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   },
   "rightshoulder": {
     "poseName": "rightshoulder",
     "transformTicks": 10,
     "poseTypes": [
       "SHOULDER_RIGHT"
     ],
     "animations": [
       "bedrock(starly, right_shoulder)",
       "look"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   },
   "swimming": {
     "poseName": "swimming",
     "transformTicks": 10,
     "poseTypes": [
       "SWIM"
     ],
     "animations": [
       "bedrock(starly, water_swim)"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   },
   "floating": {
     "poseName": "floating",
     "transformTicks": 10,
     "poseTypes": [
       "FLOAT"
     ],
     "animations": [
       "bedrock(starly, water_idle)"
     ],
     "quirks": [
       {
         "name": "blink",
         "animations": [
           "bedrock(starly, blink)"
         ]
       }
     ]
   }
 }
}