Skip to content

Instantly share code, notes, and snippets.

@cfogrady
Last active May 11, 2023 08:08
Show Gist options
  • Save cfogrady/65606fa1a58d5d3dd5c6c0411edabb38 to your computer and use it in GitHub Desktop.
Save cfogrady/65606fa1a58d5d3dd5c6c0411edabb38 to your computer and use it in GitHub Desktop.
VB DIM Format

Basic Layout

DIM Card images all seem to be 4MB in size with a bitwise NOT applied to the entire image. Data all appears to be little endian byte format with the vast majority being 16-bit unsigned integers. The only exception is a small amount of text at the beginning of the header section and sprite section.

  • 0x10 - DIM Metadata
  • 0x10000 - Locked VB Id (0s on fresh DIM) (doesn't seem to have a compliment, probably excluded from checksum)
  • 0x11000 - 2nd Locked Digivice-V Id (0s on fresh DIM)
  • 0x12000 - 1st Locked Digivice-V Id (0s on fresh DIM)
  • 0x13000 - Compliment to cancel out id at 0x11000
  • 0x14000 - Compliment to cancel out id at 0x12000
  • 0x30000 - Stats
  • 0x40000 - Evolution Requirements
  • 0x50000 - Adventure Missions
  • 0x60000 - Sprite Dimensions
  • 0x70000 - Jogress
  • 0x80000 - Specific Jogress
  • 0x100000 - Sprite Data
  • 0x3FFFFE - 16-bit Checksum
    • Add all 16-bit words in the file excluding the 8 bytes after 0x10000 and 0x3FFFFE
    • Flip the 2 byte result, and that should match what is stored here.

0x10 - DIM Metadata

  • 0x10-0x2F - ASCII Text
  • 0x30 = 0
  • 0x32 - DIM Id?
  • 0x34 - DIM Id?
  • 0x36 - 2 digit release/production year?
  • 0x38 - 2 digit release/production month?
  • 0x3A - 2 digit release/production day?
  • 0x3C - 2-digit revision number?
  • 0x40-0x5F - UNKNOWN. Guess is that this is an unused 256-bit hash? Seems to be different between DIMs. Seems to be the same after using a sprite altering program. Suggesting that this either isn't a hash, sprites aren't factored into it, or that it's unchecked.
  • 0x8F - UNKNOWN. Sometimes this is populated by a 253 byte, other times it seems blank. More testing needed.
  • 0x1010-0x102F - UNKNOWN. This only seems to appear on newer DIMs. Working theory is a new 256-bit hash.

0x30000 - Stats

This is a table, with each entry having 2 bytes

Column Details
Stage 0 = Baby I, 1 = Baby II, 2 = Child, 3 = Adult, 4 = Perfect, 5 = Ultimate
Unlock Required 65535 = No, 1 = Yes
Attribute 0 = Null, 1 = Virus, 2 = Data, 3 = Vaccine, 4 = Free
Type 0 = Stoic, 1 = Active, 2 = Normal, 3 = Indoor, 4 = Lazy
Small Attack Id 0-39
Big Attack Id 0-21
DP (Stars) 0-10
DP Number Used for actual battle calculations
HP
AP
Child/Adult Battle Chance Number translates to a chance of appearing in battles for the child/adult stage
Perfect/Ultimate Battle Chance Number translates to a chance of appearing in battles for the perfect/ultimate state

0x40000 - Evolution Requirements

Similar to Stats, this is essentially just a table with each entry consisting of 2-bytes

Column Details
Slot Id 0-16
Hours For Evolution This is 65535 if the Digimon has no further evolutions
Vital Value Requirement
UNKNOWN Appears to just be a max int buffer (65535)
Trophies Requirement
UNKNOWN Appears to just be a max int buffer (65535)
Battles Requirement
UNKNOWN Appears to just be a max int buffer (65535)
Win Ratio Whole number percentage
UNKNOWN Appears to just be a max int buffer (65535)
Slot Id For New Digimon 0-16 or 65535 if there are no other regular evolutions
UNKNOWN Appears to just be a max int buffer (65535)

0x50000 - Adventure Missions

Similar to the previous two sections, this is essentially just a table with each entry consisting of 2-bytes

Column Details
Steps
Boss Slot Id
Boss DP
Boss HP
Boss AP

0x60000 - Sprite Dimensions

Similar to the previous three sections, this is essentially just a table with each entry consisting of 2-bytes

Column Details
Width
Height

0x70000 - Jogress

Similar to the previous four sections, this is essentially just a table with each entry consisting of 2-bytes

Column Details
Slot ID Digimon in use
New Digimon Slot Id for Vaccine in backup 65535 if invalid Jogress
New Digimon Slot Id for Data in backup 65535 if invalid Jogress
New Digimon Slot Id for Virus in backup 65535 if invalid Jogress
New Digimon Slot Id for Free in backup 65535 if invalid Jogress

0x80000 - Specific Jogress

Similar to the previous five sections, this seems to essentially just a table with each entry consisting of 2-bytes. No DIM has been released with more than 1 specific jogress route, so it's unknown if this table can have more than a single entry without more testing

Column Details
Slot ID Digimon in use
New Digimon Slot Id
Digimon in Backup DIM ID
Digimon in Backup Slot ID

0x100000 - Sprite Data

  • 0x100000-0x10000C - ASCII Text
  • 0x100018-0x10001B - Last bytes of the pointer table
  • 0x10001C-0x10003F - 0s
  • 0x100040 - Start of pointer table before actual sprite data

Each element in the pointer table is 4 bytes long. The first two elements of the array seem to always be 1, 72. Hex value for 72 is 0x48, which is the offset from 0x100000 for the following (third) element. This third element is the number of sprites. Every element after the third except the last is an offset address from 0x100000 for a sprite. The last element of the table is a pointer to the termination bytes.

Immidiately following this array is the actual sprite data. This data is 16-bit R5G6B5 color. Again little endian. For the reader unfamiliar with little endian pixel data, this translates to bits in each two byte segment as GGGBBBBB RRRRRGGG.

The first two sprites are always the DIM logo and background. The following 8 sprites are the egg sprites After that the sprites are in order of monster slot. Level 0 Monsters have 6 Sprites

  1. Name
  2. Idle
  3. Idle 2
  4. Walk
  5. Happy
  6. Sleep

Level 1 Monsters have 7 sprites

  1. Name
  2. Idle
  3. Idle 2
  4. Walk
  5. Happy
  6. Sleep
  7. Full Image

Level 2 and higher Monsters have 14 sprites

  1. Name
  2. Idle
  3. Idle 2
  4. Walk
  5. Walk 2
  6. Run
  7. Run 2
  8. Workout
  9. Workout 2
  10. Happy
  11. Sleep
  12. Attack
  13. Another Run?
  14. Full Image

The termination bytes are 0xff02 0xffff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment