Preface

The resolver JSON is responsible for assigning a Pokémon species its model, textures, and poser. It is also responsible for assigning aspects to a pokemon to create variants like regional forms. Just about anything related to visuals is linked to the resolver file in some way.

The resolver file was previously known as the asset species file or similar. This was changed to prevent confusion between this file and the species files in the data folder. Because of this, many addons created before Cobblemon version 1.4 are using the species folder to hold resolver files.

Resolver File Breakdown

The resolver controls just about everything regarding a Pokémon's assets. Besides the model, animations, and form assets, it is also where you apply the data for animated and emissive textures!

While you can keep all of a Pokémon's resolver data inside of one file, separating resolver data for different forms or variants can help keep things organized. It will also prevent potential conflicts if another addon creator wants to modify something you have made.

Here is a breakdown of three different types of resolver file.

  • Vulpix: Very common format for resolvers
{
 "species": "cobblemon:vulpix",
 "order": 0,
 "variations": [
   {
     "aspects": [],
     "poser": "cobblemon:vulpix",
     "model": "cobblemon:vulpix.geo",
     "texture": "cobblemon:textures/pokemon/0037_vulpix/vulpix.png",
     "layers": []
   },
   {
     "aspects": [
       "shiny"
     ],
     "texture": "cobblemon:textures/pokemon/0037_vulpix/vulpix_shiny.png"
   }
 ]
}


  • Alolan Vulpix: A second resolver for vulpix to assign its regional form assets
    • Due to its naming scheme, the alolan vulpix resolver loads after the previous vulpix resolver.
    • The Alolan aspect comes from the alolan species feature.
{
 "species": "cobblemon:vulpix",
 "order": 1,
 "variations": [
   {
     "aspects": [
       "alolan"
     ],
     "model": "cobblemon:vulpix_alolan.geo",
     "texture": "cobblemon:textures/pokemon/0037_vulpix/vulpix_alolan.png"
   },
   {
     "aspects": [
       "alolan",
       "shiny"
     ],
     "texture": "cobblemon:textures/pokemon/0037_vulpix/vulpix_alolan_shiny.png"
   }
 ]
}


  • Charizard: Charizard uses both animated and emissive textures!
{
 "species": "cobblemon:charizard",
 "order": 0,
 "variations": [
   {
     "aspects": [],
     "poser": "cobblemon:charizard",
     "model": "cobblemon:charizard.geo",
     "texture": "cobblemon:textures/pokemon/0006_charizard/charizard.png",
     "layers": [
       {
         "name": "flame",
         "texture": {
           "frames": [
             "cobblemon:textures/pokemon/0006_charizard/flame/tail1.png",
             "cobblemon:textures/pokemon/0006_charizard/flame/tail2.png",
             "cobblemon:textures/pokemon/0006_charizard/flame/tail3.png",
             "cobblemon:textures/pokemon/0006_charizard/flame/tail4.png"
           ],
           "fps": 10,
           "loop": true
         },
         "emissive": true
       },
       {
         "name": "glow",
         "texture": "cobblemon:textures/pokemon/0006_charizard/charizard_emissive.png",
         "emissive": true,
         "translucent": true
       }
     ]
   },
   {
     "aspects": [
       "shiny"
     ],
     "texture": "cobblemon:textures/pokemon/0006_charizard/charizard_shiny.png",
     "layers": [
       {
         "name": "glow",
         "texture": "cobblemon:textures/pokemon/0006_charizard/charizard_shiny_emissive.png",
         "emissive": true,
         "translucent": true
       }
     ]
   }
 ]
}


Resolver File Examples

When creating your own resolvers, it would be easiest to use resolvers similar to what you need as a template.

Here are some examples from the Gitlab you can reference. You may also want to reference the models of each example in game so you can see the effects that their resolver file create.