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) ======================================================================