monster.md File Format

From ProjectPokemon Wiki
Revision as of 00:12, 3 February 2017 by UniqueGeek (talk | contribs)
Jump to navigation Jump to search



The "monster.md" contained in the "/BALANCE" directory, contains data for every single unique entities in the game.

Explorers of Sky's monster.md has a unique entity entry format. Entries in EoS are 68 bytes long, while in EoT/D they're 76 bytes long. Additionally, there is a "monster.mnd" file in EoT/D that appears to contain extra data related to entities in the "monster.md" file.

File Structure

Overview

Offset Length Endianness Type Name Description
0x00 8 MonsterData Header A very short header for the MD format.
0x08 (NbEntries * 68) Entities Data Block A block containing entries for every entities in the game.

MonsterData Header

Offset Length Endianness Type Name Description
0x00 4 Magic Number The string "MD\0\0", { 0x4D, 0x44, 0x0, 0x0 }, or 0x4D440000.
0x04 4 NbEntries The amount of entries in the Entities Data Block.

Entities Data Block

Simply one entity's entry after another, no padding whatsoever.

The file contains 1,155 entries. The Pokemon in the National Pokedex from 1 to 493 are represented in here. Entry #0 is a dummy entry.

There are several reasons why the file contains 1,155 entries:

  • Every Pokemon has a duplicate entry. One for each of its gender. Even genderless, or female/male-only species have 2 entries.
  • Several entities are dummy placeholders, mainly copies of Arceus's data.
  • Several entities are for special NPC characters in the game.

The layout of the data is :

  • Entries [0 to 600[ contains data for the default gender, usually male, genderless, or female.
  • Entries [600 to 1,154] contains data for the secondary gender, either female, or invalid.

The secondary entries that have their gender set to "invalid" usually are genderless or single gender specie.

Move set data, level-up data, name string, category string, and a possibly a few others, are associated to the index in the "monster.md" file of the entries [0 to 600[. The only exception to this is the way pokemon faces are assigned. The kaomado.kao file contains 1,155. Which is one for every single entity entry in the "monster.md" file. This allows separate genders to have a different set of face portraits. Its used for several Pokemon that exhibit physical gender differences.

A little more on kaomado.kao
  • Species for which both gender are physically identical have a single set of portraits corresponding to the index of their primary gender entry in "monster.md", while the entry for their secondary gender are all null. The game probably falls back to the primary gender's entry when no portrait data is found for the secondary gender.

Entity Entry (Explorers of Sky)

Entry for a single entity follow this layout. Several things in here aren't 100% certain yet however.

Entity Entry (Total length 68 bytes)
Offset Length Type Name Description
0x00 2 uint16 EntityID A entity-unique ID to identify the entity in both of its 2 entries. (Independent from file index)
0x02 2 uint16 Unk#31 Unknown. Pokemon with the same category string have the same value in here.
0x04 2 uint16 NationalPokedexNb The national Pokedex number, as displayed in Chimecho's assembly.
0x06 2 uint16 Unk#1 Unknown, seems to be 0x1 for most pokemon ! ( smaller than 1 => Slowed down status, 1 = no status, bigger than 1 => Sped up status )
0x08 2 uint16 PreEvoIndex The INDEX of the pre-evolution inside the "monster.md" file. Not the Pokedex number, or the Entity ID! Is 0 if none.
0x0A 2 uint16 EvolutionMethod The evolution method required to evolve to this Pokemon from the pre-evo specified in PreEvoIndex. Null if unused.
0x0C 2 uint16 EvoParam#1 The first parameter for the evolution method. Null if unused.
0x0E 2 uint16 EvoParam#2 The second parameter for the evolution method. Null if unused.
0x10 2 uint16 SpriteIndex The index of the Entity's sprite. Its the index inside the three Pokemon sprite files inside the "/MONSTER/" directory!
0x12 1 uint8 Gender Gender of this particular entity entry. (0 = Invalid, 1 = Male, 2 = Female, 3 = Genderless)
0x13 1 uint8 BodySize The body size of the Pokemon. Used when determining how many Pokemon fits in the party.
0x14 1 uint8 PrimaryType The Pokemon's primary type.
0x15 1 uint8 SecondaryType The Pokemon's secondary type.
0x16 1 uint8 MovementType This decides what terrains the entity can move over, and whether its hovering or not.
0x17 1 uint8 IQGroup The IQ group the Pokemon belongs to.
0x18 1 uint8 PrimaryAbility The Pokemon's primary ability's ID.
0x18 1 uint8 SecondaryAbility The Pokemon's secondary ability's ID.
0x1A 2 uint16 BitFlag1 Most likely used to store bitflags!
0x1C 2 uint16 ExpYield Possibly the Exp yield.
0x1E 2 int16 RecruitRate1 Possibly another recruit rate, this one is usually closer to 0 when RecruitRate1 and RecruitRate2 are different!
0x20 2 int16 BaseHp The HP the Pokemon has at lvl 1.
0x22 2 int16 RecruitRate2 Possibly recruit rate.
0x24 1 int8 BaseAtk The attack stat of the Pokemon at lvl 1.
0x25 1 int8 BaseSpAtk The special attack stat of the Pokemon at lvl 1.
0x26 1 int8 BaseDef The defense stat of the pokemon at lvl 1.
0x27 1 int8 BaseSpDef The base special defense of the pokemon at lvl 1.
0x28 2 int16 Weight Probably the weight tier for weight based damages.
0x2A 2 int16 Size Probably the size tier for size based damages.
0x2C 1 int8 Unk#17 Unknown. Most of the time 0xA.
0x2D 1 int8 Unk#18 Unknown. Most of the time 0xA.
0x2E 1 int8 Unk#19 Unknown. Value seems between.
0x2F 1 int8 Unk#20 Unknown. Most of the 0x8.
0x30 2 int16 Unk#21 Always 0x64. Possibly max level for the Pokemon ?
0x30 2 int16 Unk#21 Always 0x64. Possibly max level for the Pokemon ?
0x32 2 int16 BaseFormIndex Seems to match the index in the "monster.md" file of the Pokemon's first form's first entry.. Its always the index of the entry within the 0 to 600 range! Never the one between 600 and 1155 !
0x34 2 int16 ExclusiveItem#1 The first 1-star exclusive item for this Pokemon. Null if NA.
0x36 2 int16 ExclusiveItem#2 The second 1-star exclusive item for this Pokemon. Null if NA.
0x38 2 int16 ExclusiveItem#3 The 2-star exclusive item for this Pokemon. Null if NA.
0x3A 2 int16 ExclusiveItem#4 The 3-star exclusive item for this Pokemon. Null if NA.
0x3C 2 int16 Unk#27 Unknown. Values so far : 0x2EE, 0x320.
0x3E 2 int16 Unk#28 Unknown. Often 0xF.
0x40 2 int16 Unk#29 Unknown.
0x42 2 int16 Unk#30 Unknown.


Entity Entry (Explorers of Time/Darkness)

Each monster.md entry in Explorers of Time/Darkness is 76 bytes long.


Evolution Method

WARNING: The following are based on observing the data for several Pokemon, and there is a possibility the role of each fields and value is not entirely accurate.

Value Evolution Method Parameter#1 Use Parameter#2 Use
0x00 None - -
0x01 Level (uint16)Level required to evolve (uint16)Optional evolutionary item ID
0x02 IQ (uint16)IQ required (uint16)Optional evolutionary item ID
0x03 Item(s) (uint16)Regular Item ID (uint16)Optional evolutionary item ID
0x04 Unknown - -
0x05 Link Cable (uint16)Null (uint16)0x01

Evolutionary item ID are numbered from 1 to 7 apparently:

ID Name
0x01 Link Cable
0x02 Unknown
0x03 Unknown
0x04 Unknown
0x05 Sun Ribbon
0x06 Lunar Ribbon
0x07 Beauty Scarf

Type List

Value Type
0x00 None
0x01 Normal
0x02 Fire
0x03 Water
0x04 Grass
0x05 Electric
0x06 Ice
0x07 Fighting
0x08 Poison
0x09 Ground
0x0A Flying
0x0B Psychic
0x0C Bug
0x0D Rock
0x0E Ghost
0x0F Dragon
0x10 Dark
0x11 Steel
0x12 Neutral

Ability IDs List

List of all the possible Pokemon abilities.

Value Ability
0x1 Stench
0x2 Thick Fat
0x3 Rain Dish
0x4 Drizzle
0x5 Arena Trap
0x6 Intimidate
0x7 Rock Head
0x8 Air Lock
0x9 Hyper Cutter
0xA Shadow tag
0xB Speed Boost
0xC Battle Armor
0xD Sturdy
0xE Suction Cups
0xF Clear Body
0x10 Torrent
0x11 Guts
0x12 Rough Skin
0x13 Shell Armor
0x14 Natural Cure
0x15 Damp
0x16 Limber
0x17 Magnet Pull
0x18 White Smoke
0x19 Synchronize
0x1A Overgrow
0x1B Swift Swim
0x1C Sand Stream
0x1D Sand Veil
0x1E Keen Eye
0x1F Inner Focus
0x20 Static
0x21 Shed Skin
0x22 Huge Power
0x23 Volt Absorb
0x24 Water Absorb
0x25 Forecast
0x26 Serene Grace
0x27 Poison Point
0x28 Trace
0x29 Oblivious
0x2A Truant
0x2B Run Away
0x2C Sticky Hold
0x2D Cloud Nine
0x2E Illuminate
0x2F Early Bird
0x30 Hustle
0x31 Drought
0x32 LightningRod
0x33 CompoundEyes
0x34 Marvel Scale
0x35 Wonder Guard
0x36 Insomnia
0x37 Levitate
0x38 Plus
0x39 Pressure
0x3A Liquid Ooze
0x3B Color Change
0x3C Soundproof
0x3D Effect Spore
0x3E Flame Body
0x3F Minus
0x40 Own Tempo
0x41 Magma Armor
0x42 Water Veil
0x43 Swarm
0x44 Cute Charm
0x45 Immunity
0x46 Blaze
0x47 Pickup
0x48 Flash Fire
0x49 Vital Spirit
0x4A Chlorophyll
0x4B Pure Power
0x4C Shield Dust
0x4D Ice Body
0x4E Stall
0x4F Anger Point
0x50 Tinted Lens
0x51 Hydration
0x52 Frisk
0x53 Mold Breaker
0x54 Unburden
0x55 Dry Skin
0x56 Anticipation
0x57 Scrappy
0x58 Super Luck
0x59 Gluttony
0x5A Solar Power
0x5B Skill Link
0x5C Reckless
0x5D Sniper
0x5E Slow Start
0x5F Heatproof
0x60 Download
0x61 Simple
0x62 Tangled Feet
0x63 Adaptability
0x64 Technician
0x65 Iron Fist
0x66 Motor Drive
0x67 Unaware
0x68 Rivalry
0x69 Bad Dreams
0x6A No Guard
0x6B Normalize
0x6C Solid Rock
0x6D Quick Feet
0x6E Filter
0x6F Klutz
0x70 Stedfast
0x71 Flower Gift
0x72 Poision Heal
0x73 Magic Guard
0x74 $$$
0x75 Honey Gather
0x76 Aftermath
0x77 Snow Cloak
0x78 Snow Warning
0x79 Forewarn
0x7A Storm Drain
0x7B Leaf Guard

IQ Groups List

Here are the possible values for a Pokemon's IQ group:

Value IQ Group
0x0 A
0x1 B
0x2 C
0x3 D
0x4 E
0x5 F
0x6 G
0x7 H
0x8 Unused
0x9 Unused
0xA I
0xB J
0xC Unused
0xD Unused
0xE Unused
0xF Invalid


Movement Types List

Defines on what types of terrain the Pokemon can move on. All types above "Standard" also include the terrain Standard refers to.

Value Movement Type
0x0 Standard
0x1 Unknown
0x2 Hovering
0x3 Unknown
0x4 Lava
0x5 Water


More Details

Credits

  • Jellynater for the list of Pokemon abilities.
  • TruePikachu for some of the details on the monster.md format! [1]
  • The WMS project, for their notes. [2]
  • OgreGunner and nhahtdh for that huge thread on GameFaqs filled with tidbits of information! [3]
  • Kelvin Chung for the .grammar file containing much useful information on the PMD:RRT format, which share similarities with PMD2! [4]