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