Line 90:
Line 90:
==Checksum==
==Checksum==
−
The algorithm used to verify the integrity of the database is based on [http://srecord.sourceforge.net/crc16-ccitt.html CRC16-CCITT], though it's an incorrect implementation. It is the same algorithm used to verify [http://wiibrew.org/wiki/Mii_Data#Block_format Mii Data on the Wii].
+
The algorithm used to verify the integrity of the database is based on CRC-16/XMODEM. It is the same algorithm used to verify [http://wiibrew.org/wiki/Mii_Data#Block_format Mii Data on the Wii].
To obtain the correct value for the checksum, apply the algorithm to the first 0xC81E bytes of the database. This can be done using [https://gbatemp.net/threads/tutorial-give-your-mii-gold-pants-and-use-it-for-streetpass.379146/page-24#post-6569186 FixCRC]; alternativly a pseudocode implementation of the checksum algorithm is given below:
To obtain the correct value for the checksum, apply the algorithm to the first 0xC81E bytes of the database. This can be done using [https://gbatemp.net/threads/tutorial-give-your-mii-gold-pants-and-use-it-for-streetpass.379146/page-24#post-6569186 FixCRC]; alternativly a pseudocode implementation of the checksum algorithm is given below:
Line 96:
Line 96:
<source lang="python">
<source lang="python">
def crc16_CCITTWii(u8[]: data) -> u16:
def crc16_CCITTWii(u8[]: data) -> u16:
−
"""Calculate a checksum of data using the CRC16-CCITT implementation of the Wii
+
"""Calculate a checksum of data using the CRC-16/XMODEM implementation
−
This implementation uses 0x0000 as the starting value, which is different
+
CRC-16/XMODEM implementation uses 0x0000 as the starting value
−
from what CRC16-CCITT specifies.
"""
"""
−
+
−
# note: a correct implementation of CRC16-CCITT
−
# would initialize this to 0xffff
u32 crc := 0x0
u32 crc := 0x0
Line 135:
Line 132:
| 0x0
| 0x0
| 0x1
| 0x1
−
| Always 3?
+
| Mii Version - Always 3
|-
|-
| 0x1
| 0x1
Line 147:
Line 144:
| 0x3
| 0x3
| 0x1
| 0x1
−
| bit 0-3: ?<br/>bit 4-6: version? (1=Wii, 2=DSi, 3=3DS)
+
| bit 0-3: ?<br/>bit 4-6: Device Mii was originally made on (1=Wii, 2=DS, 3=3DS, 4=Wii U/Switch)
|-
|-
| 0x4
| 0x4
Line 155:
Line 152:
| 0xC
| 0xC
| 0x4
| 0x4
−
| Mii ID (big-endian 32bit unsigned integer):<br/>Bit 0..27: (bit[0..27] * 2) = date of creation (seconds since 01/01/2010 00:00:00)<br/>Bit 28: Always set?<br/>Bit 29: set for temporary Mii<br/>Bit 30: Set for DSi mii?<br/>Bit 31: not set iff Mii is special
+
| Mii ID (big-endian 32bit unsigned integer):<br/>Bit 0..27: (bit[0..27] * 2) = date of creation (seconds since 01/01/2010 00:00:00)<br/>Bit 28: Always set?<br/>Bit 29: set for temporary Mii<br/>Bit 30: Set for DSi mii?<br/>Bit 31: not set if Mii is special
|-
|-
| 0x10
| 0x10
Line 207:
Line 204:
| 0x3E
| 0x3E
| 0x2
| 0x2
−
| bit 0-5: mouse style<br/>biy 6-8: mouse color<br/>bit 9-12: mouse scale<br/>bit 13-15: mouse yscale
+
| bit 0-5: mouth style<br/>bit 6-8: mouth color<br/>bit 9-12: mouth scale<br/>bit 13-15: mouth yscale
|-
|-
| 0x40
| 0x40
| 0x2
| 0x2
−
| bit 0-4: mouse y position<br/>bit 5-7: mustach style
+
| bit 0-4: mouth y position<br/>bit 5-7: mustach style
|-
|-
| 0x42
| 0x42
Line 233:
Line 230:
====Special (gold) Miis====
====Special (gold) Miis====
−
Specialness will override any other color and make the Mii non-editable.
+
Specialness will override any other pants color.
−
Copying is rumored to have to be disabled.
+
A special Mii cannot have sharing on or else it will be deemed invalid.
Zeroed system-id and timestamp?
Zeroed system-id and timestamp?
Line 251:
Line 248:
====Personal (red) Mii====
====Personal (red) Mii====
A red Mii that happens to be the first in the file!
A red Mii that happens to be the first in the file!
+
+
The Mii doesn't really need to be red, it is only red because the personal Mii is always favorited.
==Mii values==
==Mii values==
Line 584:
Line 583:
0x64,0x06,0x14,
0x64,0x06,0x14,
0x5d,0x66,0x1b,
0x5d,0x66,0x1b,
−
0x04,0x11,0x6e]
+
0x04,0x11,0x6e],
[0x7b,0x08,0x6a,
[0x7b,0x08,0x6a,
0x48,0x03,0x15,
0x48,0x03,0x15,