Nintendo Wii has the possibility to define characters that represent you in the games. You have the possibility to change these characters. To do that you need the one or the other Mii editor.
If you just want to cut to the chase and download a whole bunch of Mii’s you can do that here.
There are several possibilities which can be used. Of course you can do it using the Wii which is the traditional way but there are other options.
First there is the My Avitar Editor. This is a swf file which can be run in execution mode on your PC. You get the screen below where you can edit, change and even save to picture file on your PC.
On these links you can do this online. http://www.codejunkies.com/miieditor/ and http://www.miisearch.com/mii-creator.html
The second option is to use a dedicted program which configues your file in the same way. (The middle picture is the Wii Mii editor v1.2)
The files that are produced are mae (Mii avitar editor) files or mii files but both are identical. Once you have generated these files you can upload them to this site http://www.miicharacters.com/wii.php?mii=188 and get the helpfull instructonal that is pictured on the right. If you want to generate a Mii from the instruction set you have to start with the default characters. These are defaultBoy.mae and defaultGrl.mae.
There is also the possibility to make a special Mii. You can read about it here. http://www.davidhawley.co.uk/special-miis-gold-pants-and-creating.aspx
What i normally do is generate a set of Wii instruction as the picture below. These i then enter them manually into the Wii.
I find this the easiest way to make Mii’s and get them into the Wii.
Now follows the hexdump of a Mii file.
Mii file build up
They are 74 0x4A bytes long.
Their meaning can be found here http://wiibrew.org/wiki/Mii_Data.
// addr: 0x00 & 0x01 0D D2 0000 1101 1101 0010 invalid:1 ;--| = 0 = valid // doesn't seem to have any effect? isGirl:1 ;---| = 0 = male // gender month:4 ;----| | = 0011 = 3 = march // birthday month day:5 ;---------| | = 01110 = 14 // birthday day favColor:4 ;----------------| | = 01001 = 9 // 0 - 11 Keep in this range or else things can go wrong isFavorite:1 ;--------------------| = 0 // addr: 0x02 through 0x15 name[MII_NAME_LENGTH]; 00 41 00 6C 00 62 00 65 00 72 00 74 00 20 00 45 00 00 00 00 Albert E // addr: 0x16 height; // 0 - 127 // addr: 0x17 weight; // 0 - 127 // addr: 0x18 - 0x1B miiID1; // Unique Mii identifier. Seems to increment with time. Also can miiID2; // be used to change colour of Mii Trousers (see 'See Also' links) miiID3; miiID4; // addr: 0x1C through 0x1F systemID0; // Checksum8 of first 3 bytes of mac addr systemID1; // mac addr 3rd-to-last byte systemID2; // mac addr 2nd-to-last byte systemID3; // mac addr last byte // addr: 0x20 & 0x21 faceShape:3; // 0 - 7 skinColor:3; // 0 - 5 facialFeature:4; // 0 - 11 unknown:3; // Mii appears unaffected by changes to this data mingleOff:1; // 0 = Mingle, 1 = Don't Mingle unknown:1; // Mii appears unaffected by changes to this data downloaded:1; // If the Mii has been downloaded from the Check Mii Out Channel // addr: 0x22 & 0x23 hairType:7; // 0 - 71, Value is non-sequential with regard to page, row and column hairColor:3; // 0 - 7 hairPart:1; // 0 = Normal, 1 = Reversed unknown:5; // addr:0x24 through 0x27 eyebrowType:5; // 0 - 23, Value is non-sequential with regard to page, row and column unknown:1; eyebrowRotation:4; // 0 - 11, Default value varies based on eyebrow type unknown:6; eyebrowColor:3; // 0 - 7 eyebrowSize:4; // 0 - 8, Default = 4 eyebrowVertPos:5; // 3 - 18, Default = 10 eyebrowHorizSpacing:4; // 0 - 12, Default = 2 // addr: 0x28 through 0x2B eyeType:6; // 0 - 47, Value is non-sequential with regard to page, row and column unknown:2; eyeRotation:3; // 0 - 7, Default value varies based on eye type eyeVertPos:5; // 0 - 18, Default = 12 eyeColor:3; // 0 - 5 unknown:1; eyeSize:3; // 0 - 7, Default = 4 eyeHorizSpacing:4; // 0 - 12, Default = 2 unknown:5; // addr: 0x2C & 0x2D noseType:4; // 0 - 11, Value is non-sequential with regard to row and column noseSize:4; // 0 - 8, Default = 4 noseVertPos:5; // 0 - 18, Default = 9 unknown:3; // addr: 0x2E & 2F lipType:5; // 0 - 23, Value is non-sequential with regard to page, row and column lipColor:2; // 0 - 2 lipSize:4; // 0 - 8, Default = 4 lipVertPos:5; // 0 - 18, Default = 13 // addr: 0x30 & 0x31 glassesType:4; // 0 - 8 glassesColor:3; // 0 - 5 unknown:1; // when turned on mii does not appear (use not known) glassesSize:3; // 0 - 7, Default = 4 glassesVertPos:5; // 0 - 20, Default = 10 // addr: 0x32 & 33 mustacheType:2; // 0 - 3 beardType:2; // 0 - 3 facialHairColor:3; // 0 - 7 mustacheSize:4; // 0 - 8, Default = 4 mustacheVertPos:5; // 0 - 16, Default = 10 // addr: 0x34 & 0x35 moleOn:1; // 0 = No Mole, 1 = Has Mole moleSize:4; // 0 - 8, Default = 4 moleVertPos:5; // 0 - 30, Default = 20 moleHorizPos:5; // 0 - 16, Default = 2 unknown:1; // addr: 0x36 through 0x49 creatorName[MII_CREATOR_NAME_LENGTH];
You can upload and download Mii data into the Wii.
Its quite a complicated process and the details of how to do can be found here. http://www.wiibrew.org/wiki/Homebrew_setup
The Mii data is stored on the Wiimote in two blocks. Each block is composed of 750 bytes of Mii data, followed by a 2 byte CRC. If the data in the first block does not match the CRC for that block, the second block is used instead. At that point, if the CRC of the second block does not match its data, no Mii data will be available.
The blocks are 752 bytes in length (0x2f0 bytes), and are stored consecutively starting at address 0x0fca in the Wiimote memory.
At the beginning of each block, there is a 4-byte value (‘RNCD’) which may be a Mii software version number, as it is the same across multiple Wiis and multiple Wiimotes. After these 4 bytes, there are 2 bytes which determine which slots are Mii parade slots. Left shift 0x0001 by the slot number to set it as Mii parade (hidden when viewed on the Wiimote). If a slot is empty, or filled by a non-parade Mii, its parade slot bit will be set to 0.
The last two bytes of the block are a CRC-16 CCITT of the previous 750 bytes (polynomial 0x1021, starting value 0x0000).
This is a short (but working) version of the CRC calculation algorithm, written in Java (should be easy to adapt for arduino IDE).
You could using a SD shield adapt such a block dataset and upload it directly into the wii. There are a number of programs that can do that. You can find them here http://wiibrew.org/wiki.
/** * Calculate a modified CRC16-CCITT checksum of a byte array, as used for * checking the validity of a Mii data block stored on a Wiimote. * * @param bytes the byte array to calculate the checksum for * @return the checksum (in the lower 16 bits) */ static int crc (byte[] bytes) { int crc = 0x0000; for (int byteIndex = 0; byteIndex < bytes.length; byteIndex++) { for (int bitIndex = 7; bitIndex >= 0; bitIndex--) { crc = (((crc << 1) | ((bytes[byteIndex] >> bitIndex) & 0x1)) ^ (((crc & 0x8000) != 0) ? 0x1021 : 0)); } } for (int counter = 16; counter > 0; counter--) { crc = ((crc << 1) ^ (((crc & 0x8000) != 0) ? 0x1021 : 0)); } return (crc & 0xFFFF); }
Here the complete block file including the CRC check at the end.
Finally you can find a whole load of Mii files here.
If you are looking for other arduino projects look here.
Where do you want to navigate to:
arduino projects Many complex arduino projects for you to understand and try.
arduino totorial About how to use the arduino for interfacing to integrated circuits.
arduino webshop Buy my PCB’s and some of the components.
arduino shields The shields that i have developed.
arduino leonardo The new arduino board with some tips, tricks and projects to try out.
arduino Home page of the site