Metin2 .msm Files Explained: HairData, ShapeData and Costumes

Every Metin2 character class has a corresponding .msm file — a model script that tells the client which 3D model and skin texture to display for each costume or hairstyle index. Understanding this file is essential any time you add new cosmetic items to a private server.

To search and extract entries from your .msm files without opening a text editor, use the Metin2 MSM Extractor.


1. The Eight Character MSM Files

Metin2 ships with eight character files, one per class and gender:

  • warrior_m.msm — Warrior (Male)
  • warrior_w.msm — Warrior (Female)
  • assassin_m.msm — Ninja (Male)
  • assassin_w.msm — Ninja (Female)
  • sura_m.msm — Sura (Male)
  • sura_w.msm — Sura (Female)
  • shaman_m.msm — Shaman (Male)
  • shaman_w.msm — Shaman (Female)

These files live in the client's pack/ folder, typically inside an index archive. When adding or editing cosmetics you need the unpacked version.


2. MSM File Structure

Each file has a header and two main sections:

ScriptType            RaceDataScript

BaseModelFileName     "d:/ymir work/pc2/assassin/assassin_novice.GR2"

Group HairData
{
    PathName    "d:/ymir Work/pc2/assassin/"
    HairDataCount   61

    Group HairData00
    {
        HairIndex   0
        Model       "hair/hair_1_1.gr2"
        SourceSkin  "hair/hair_1_1.dds"
        TargetSkin  "assassin_hair_01.dds"
    }
    ...
}

Group ShapeData
{
    PathName    "d:/ymir Work/pc2/assassin/"
    ShapeDataCount  146

    Group ShapeData00
    {
        ShapeIndex  0
        Model       "assassin_novice.GR2"
        SourceSkin  "assassin_novice_red.dds"
        TargetSkin  "assassin_novice_red.dds"
    }
    ...
}

The PathName is a base directory for resolving relative paths in Model, SourceSkin, and TargetSkin.


3. HairData Blocks

Each Group HairDataNN block defines one hairstyle entry:

  • HairIndex — the index the game engine uses to look up this hairstyle. This value is what you put in the item's hair index field in item_proto.
  • Model — the .gr2 mesh file for this hairstyle (relative to PathName)
  • SourceSkin — the original/default texture file the mesh is designed for
  • TargetSkin — the texture that is actually applied in-game. For re-colours of the same mesh, only TargetSkin changes.

Hair indices follow specific ranges by convention:

  • 0–5 — basic hair colour variants (same mesh, different DDS)
  • 2001–2999 — additional hairstyle models
  • 5001+ — premium or cosmetic hairstyles

4. ShapeData Blocks

Each Group ShapeDataNN block defines one body costume/armour appearance:

  • ShapeIndex — the costume index. This matches the look_vnum or appearance index used by the costume system. Index 0 is always the base novice appearance.
  • Model — the .gr2 mesh (body model) for this costume
  • SourceSkin — the texture the mesh was designed with
  • TargetSkin — the texture applied in-game. Reskin variants of the same mesh only change TargetSkin.

When multiple ShapeData entries share the same Model but have different TargetSkin values, they represent colour or texture variants of the same costume set — common for items sold in sets (red, blue, gold variants).


5. Adding a New Costume to Your Server

The process for adding a new costume set:

  1. Unpack the target .msm file(s) from the client archive
  2. Decide on a ShapeIndex that isn't already used — check existing entries to find a free slot
  3. Place your new .gr2 mesh and .dds texture files in the client's data directory under the path matching PathName
  4. Add a new Group ShapeDataNN block to the file, incrementing NN sequentially, and set the correct ShapeIndex, Model, SourceSkin, and TargetSkin
  5. Update ShapeDataCount at the top of the section to include the new entry
  6. Add the corresponding costume item to item_proto with the matching look/shape index
  7. Repack and distribute the updated client files

Do this for each of the 8 character files if the costume should be wearable by all classes. If it is class-specific, only the relevant file(s) need updating.


6. Finding Entries with the MSM Extractor

Large .msm files can have 100+ shape entries and 60+ hair entries. Searching manually is slow and error-prone. The MSM Extractor tool lets you upload all eight .msm files at once, search by keyword (model name, DDS filename, or index number), and instantly see all matching HairData and ShapeData blocks with the keyword highlighted. You can download results per character or as a zip — ready to paste into another file.