Mii: Difference between revisions

Mii format: updated "private name?" to what it really is - a profanity flag.
Checksum: The implementation is not wrong it's just a different one called CRC-16/XMODEM
(9 intermediate revisions by 5 users not shown)
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,