Sonic Adventure 1 Chao Data

Here are Tyro’s personal notes on his findings for the Dreamcast Sonic Adventure Chao system. This is being shared for the first time to the public on Chao Island and is Tyro’s request that this is not copied to any other websites. Tyro can be contacted via our Forums or Discord.

Sonic Adventure 1 Chao Data
---------------------------

General information:

Because it is a game file, every Chao Download file must have an extra
game header at the beginning.  At offset 0x1df, there must be an ASCII
string in uppercase letters saying "UCHAO ACCEPT", followed by a zero
byte, so the Sonic Adventure game recognizes the file as a Chao Download.
The offsets of the Chao Data for Slot 1 and Slot 2 follow right after
that.

The start of Slot 1 is stored at offset 0x01ec in the game file, the
start of Slot 2 is stored at offset 0x1ee.  Both are little endian
word-values (two bytes, lowest significant byte first).  Each Chao Data
Slot is 512 ($200) bytes long and must start at an address that is
divisable by 512.  Also, Slot 1 must always be located before Slot 2 in
the Chao Download file, otherwise it won't work (which means that just
switching the stored offsets at 0x1ec and 0x1ee isn't enough).

  ======================================================================

All offsets listed below are meant relative to the beginning of the
Chao Data:

  ======================================================================

0x00                   Chao Type

  $00 = Baby Chao
  $01 = Adult Chao
  $02 = Swim Chao
  $03 = Fly Chao
  $04 = Run Chao
  $05 = Power Chao
  $06 = Light Chaos Chao
  $07 = Chao Egg
  $08 = Empty

Note:  a Chao Egg can only be in slot 2, while normal Chao can only be
       in slot 1.

  ======================================================================

0x01                   Chao Location

  $00 = Station Square
  $01 = Egg Carrier
  $02 = Mystic Ruins

  ======================================================================

0x02                   Chao Happiness
                       0 - 100 ($00 - $64)

  ======================================================================

0x04 - 0x0b            Chao Name

The Chao name is encoded in ASCII for values $20 to $5f, with the
exeption of $5c, which is a yen symbol.  Katakana starts with $64
and goes to $b6. The characters are in the following order:

  small A, A, small I, I, small U, U, small E, E, small O, O,
  KA, GA, KI, GI, KU, GU, KE, GE, KO, GO,
  SA, ZA, SHI, JI, SU, ZU, SE, ZE, SO, ZO,
  TA, DA, CHI, JI, small TSU, TSU, JU, TE, DE, TO, DO,
  NA, NI, NU, NE, NO,
  HA, BA, PA, HI, BI, PI, FU, BU, PU, HE, BE, PE, HO, BO, PO,
  MA, MI, MU, ME, MO,
  small YA, YA, small YU, YU, small YO, YO,
  small WA, WA, the two slashes, the circle, WO, N,

The final characters are at 0xB7 to 0xBF, in the following order:

  dot, heart, tilde, female, male, note, elipse, backslash, circle.

Pad unused bytes at the end of the name field with zero bytes ($00).
Also, make sure to have at least one padding byte at the end.

  ======================================================================

0x0c - 0x0d            Swim Stat
0x0d - 0x0f            Run Stat
0x10 - 0x11            Fly Stat
0x12 - 0x13            Power Stat

Swim / Run / Fly / Power are encoded 10 times the stat they hold.

  ======================================================================

0x14 - 0x15            HP
0x16 - 0x17            Max HP

HP / Max HP are encoded 100 times the stat they hold.

  ======================================================================

0x18 - 0x1f            Inventory

Inventory can hold a total of 8 objects and must be in continuous order
(no empty slots in-between).  Empty inventory slots at the end must be
filled with zero bytes ($00).

The following items are possible:

  $01 = Lifenut
  $02 = Cherry
  $03 = Lemon
  $04 = Grape
  $05 = Plum
  $06 = Chaonut
  $07 = Hastenut
  $08 = Starnut
  $09 = Lazynut

  ======================================================================

0x20 - 0x2b            Body Mods

Each Body Mod is a little endian dword value (4 bytes, lowest significant
byte first).

  0x020    RUN (low) or POW (high)
  0x024    FLY (low) or SWIM (high)
  0x028    amount of change ratio (0x3c000000 to 0x3fc00000)

The values on Body Mods are like this:

  $00000000 to $3fc00000 is low Body Mod value
  $3fc00001 to $3fffffff is "Chao Freak"
  $40000000 to $7fffffff is invisiblity glitch
  $80000000 to $bfc00000 is high Body Mod value
  $bfc00001 to $bfffffff is "Chao Freak"
  $c0000000 to $ffffffff is invisiblity glitch

"Chao Freaks" are hideously deformed Chao (glitch in the program).

  ======================================================================

0x2c - 0x2d            Chao Affection

Encoded 10 times the affection it holds.

  ======================================================================

0x2e - 0x2f            Chao Age

This value goes upward while the Chao is a baby, starting with something
around 135 ($87), then counts downward once the Chao has turned into an
adult.  When it reaches zero, the Chao dies.

Light Chaos Chao seem to be immortal.

Note:  for a baby Chao, the Body Mod Change Ratio is used to determine
       its age.  When it reaches the highest possible value, the Chao
       will spin a coccoon and mature.

  ======================================================================

0x32 - 0x33            Chao Abilities

Abilities are bit-mapped, as listed below:

                       offset 0x32  |  offset 033  |  gained ability
  ----------------------------------|--------------|--------------------
                        11111111    |   01111111   |
                        ³³³³³³³³    |    ³³³³³³³   |
  Rabbit         ÄÄÄÄÄÄÄÙ³³³³³³³    |    ³³³³³³³   |    somersault
  Kangaroo       ÄÄÄÄÄÄÄÄÙ³³³³³³    |    ³³³³³³³   |    boxing
  Gorilla        ÄÄÄÄÄÄÄÄÄÙ³³³³³    |    ³³³³³³³   |    drumming
  Lion           ÄÄÄÄÄÄÄÄÄÄÙ³³³³    |    ³³³³³³³   |    face washing
  Elephant       ÄÄÄÄÄÄÄÄÄÄÄÙ³³³    |    ³³³³³³³   |    wrestling
  Mole           ÄÄÄÄÄÄÄÄÄÄÄÄÙ³³    |    ³³³³³³³   |    use shovel
  Koala          ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³    |    ³³³³³³³   |    play trumpet
  Skunk          ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ    |    ³³³³³³³   |    drawing
                                         ³³³³³³³   |
  Seal           ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³³³³³³   |    dancing
  Penguin        ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³³³³³   |    skating
  Sea Otter      ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³³³³   |    backstroke
  Peacock        ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³³³   |    lie down on side
  Swallow (Flicky)  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³³   |    spin around
  Parrot         ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³   |    singing
  Deer           ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ   |    bowing

  ======================================================================

0x34                   Chao Jewelry

Jewelry is bit-mapped; only the jewel with the biggest value is displayed.

  Bit 0 = Pearl     (00000001)
  Bit 1 = Amethyst  (00000010)
  Bit 2 = Sapphire  (00000100)
  Bit 3 = Ruby      (00001000)
  Bit 4 = Emerald   (00010000)

  ======================================================================

0x36                   Chao Color 1
0x192                  Chao Color 2

Use the values below to get the appropriate colors:

  offset 0x36  |  offset 0x192  |  color
  -------------|----------------|----------------------
     $00       |    $00         |  cyan
     $02       |    $00         |  dark grey
     $04       |    $00         |  gold
     $06       |    $00         |  patina
     $08       |    $00         |  silver
     $0a       |    $00         |  black
     $40       |    $00         |  purple  (Jewel Chao)
     $40       |    $01         |  green   (Jewel Chao)
     $40       |    $02         |  red     (Jewel Chao)
     $40       |    $03         |  blue    (Jewel Chao)

  ======================================================================

0x4c                   Animal Mod - Head Front
0x4d                   Animal Mod - Head Back
0x4e                   Animal Mod - Ears
0x4f                   Animal Mod - Wings
0x50                   Animal Mod - Hands
0x51                   Animal Mod - Feet
0x52                   Animal Mod - Tail

The following animals are possible:

  $00 = Seal
  $01 = Penguin
  $02 = Otter
  $03 = Peacock
  $04 = Flicky
  $05 = Parrot
  $06 = Deer
  $07 = Bunny
  $08 = Kangaroo
  $09 = Gorilla
  $0a = Lion
  $0b = Elephant
  $0c = Mole
  $0d = Koala
  $0e = Skunk
  $0f = Empty Mod

  ======================================================================

0x5c - 0x5f            Face Mods (encoding still unknown)

  ======================================================================

0x61                   Tiredness Level
0x62                   Hunger Level

Tiredness and Hunger levels go from 0 - 200 ($00 - $c8)

  ======================================================================

0x6c                   Favorite Sonic
0x6e                   Favorite Tails
0x70                   Favorite Knuckles
0x72                   Favorite Amy
0x74                   Favorite E102
0x76                   Favorite Big

Favorite levels go from 0 - 100 ($00 - $64)

  ======================================================================

DC Chao Hacking Guide

Coco the Mascot Chao