No edit summary
No edit summary
Line 10: Line 10:
Sometimes there may be animations that don't seem to have a matching pose, such as <code>blink</code> animations. These can be applied using the <code>quirk</code> 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!
Sometimes there may be animations that don't seem to have a matching pose, such as <code>blink</code> animations. These can be applied using the <code>quirk</code> 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. This example is not meant to be used as a template.
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.


  Very epic poser file example. (I need to write it myself 😭)
  {
    "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", "FLOAT"],
        "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)"]
          }
        ]
      }
    }
  }
</br>
</br>
=== 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.
==== Layered Animations ====
2 animations played at same time
==== Animation Overwrites ====
True/False when listing animation
==== Quirks ====
short Animations that play during another animation
==== Transformed Parts ====
Hide parts, change positions and rotations
==== Animation Conditions ====
isBattle or isTouchingWater true/false
=== Poser File Example ===
=== Poser File Example ===
Instead of making <code>poser</code> 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 <code>head bone</code>.
Instead of making <code>poser</code> 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 <code>head bone</code>.

Revision as of 03:04, 6 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", "FLOAT"],
       "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 make do amazing things in the game.

Layered Animations

2 animations played at same time

Animation Overwrites

True/False when listing animation

Quirks

short Animations that play during another animation

Transformed Parts

Hide parts, change positions and rotations

Animation Conditions

isBattle or isTouchingWater true/false

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)"
         ]
       }
     ]
   }
 }
}