App Details
Virtual amiibo (amiibo emulation) system for Nintendo Switch
## Virtual amiibos
Virtual amiibos go inside `sd:/emuiibo/amiibo`. For instance, an amiibo named `MyMario` would be `sd:/emuiibo/amiibo/MyMario/`. They can go inside sub-directories, like `sd:/emuiibo/amiibo/SSBU/Yoshi`.
A virtual amiibo is detected by emuiibo based on two aspects: a `amiibo.json` and a `amiibo.flag` file must exist inside the virtual amiibo's folder mentioned above. If (for whatever reason) you would like to disable a virtual amiibo from being recognised by emuiibo, just remove the flag file, and create it again to enable it.
The JSON file contains all the aspects and data an amiibo needs to provide to games, except a few special ones (per-game savedata, protocol and tag type...)
## Usage and controlling
If you set up everything mentioned above, you're ready to use emuiibo ingame.
**Tip:** Enable it (emulation status) before you start a game, because it does not work in some games if you enable it after launching the game! It really depends on how the game uses amiibos internally, so this guarantees emuiibo will intercept the game.
To see if emuiibo is working ingame, check if emuiibo is intercepting the game when it's trying to access amiibos. If it's not, try launching the game with emuiibo enabled first.
To open the Tesla overlay, hold down **L1 + DPAD-down** and then press **R3 (right stick)**. If you did it, the overlay will open on the left side of the screen. Now choose emuiibo.
You can see/control the following options in the top part of the overlay:
- **Emulation status (on/off)**: when emuiibo's emulation status is on, it means that any game trying to access/read amiibos will be intercepted by emuiibo. When it's off, it means that amiibo services will work normally, and nothing will be intercepted. This is basically a toggle to globally disable or enable amiibo emulation.
- **Active virtual amiibo**: it's the amiibo which will be sent to the games which try to scan amiibos, if emulation is on. If the amiibo happens to have an image, this will be displayed in the top part of the overlay.
- **Virtual amiibo status (connected/disconnected)**: when the active virtual amiibo is connected, it means that the amiibo is always "placed", as if you were holding a real amiibo on the NFC point and never moving it - the game always detects it. When it is disconnected, it means that you "removed" it, as if you just removed the amiibo from the NFC point. Some games might ask you to remove the amiibo after saving data, so you must disconnect the virtual amiibo to "simulate" that removal. This is a recent feature, since emuiibo tried to handle this automatically in previous versions, causing some games to fail.
- **Random UUID (on/off)**: when a virtual amiibo is selected, this will toggle the random UUID option on the amiibo (see above), which will make emuiibo use randomized UUIDs any time a game accesses the amiibo.
In the main menu of the bottom part, You can browse virtual amiibos (and thus select them) through the (sub)directories in `sd:/emuiibo/amiibo`. You can also mark some of them as favorites, which can be easily accessed from a separate menu below.
After you selected an amiibo, you can see it's selected on top in the overlay and that it is *connected*.
A virtual amiibo being **connected** is the equivalent of holding a real amiibo figurine/card on the NFC point. To **disconnect** the amiibo (the equivalent of removing a real amiibo from the NFC point), just select the same amiibo again.
To go back in the menus, just press **B** button.
**Example of use**:
1. Open the overlay and choose emuiibo
2. Enable emuiibo
3. Start the game
4. Navigate to the games NFC feature to use the amiibo and activate it
5. Open the overlay and choose your amiibo (the amiibo will then be *connected*).
6. The game should now register/make use of it
7. If the game tells you to remove the amiibo, *disconnect* it.
## For developers
emuiibo hosts a custom IPC service, also named emuiibo, which can be used to control amiibo emulation by other homebrew tools.
The overlay's code serves a good example to see how to control emuiibo with libnx.
## Credits
- Everyone who contributed to the original nfp-mitm project (and other forks): Subv, ogniK, averne, spx01, SciresM
- AmiiboAPI web API, which is used by emutool to get a proper, full amiibo list, in order to generate virtual amiibos.
- 3dbrew for their detailed documentation of amiibos, even though some aspects are different on the Switch.
- LoOkYe for writing emuiibo's wiki and helping with support.
- AD2076 and AmonRaNet for helping with the tesla overlay.
- AmonRaNet for all the work he put into the overlay.
- AmonRaNet, Impeeza, amazingfate, qazrfv1234, shadow2560 and SimoCasa for providing/helping with translations.
- Thog / Ryujinx devs for reversing mii services and various of its types.
- Citra devs for several amiibo formats used in 3DS systems.
- Manlibear for helping with improvements and development of emutool.
- All the testers and supporters from my Discord server who were essential for making this project progress and become what it is now :)
## License exemption
The Ryujinx project/team is exempt from GPLv2 licensing, and may make use of emuiibo's code licensing it under their current license.
Changelog
1.1.1
Dependencies were adjusted to properly support Java 8 as well (emuiigen)
A consequence of this is that combo boxes are no longer searchable (for now)
1.1.0
Selected status option (on/off) is now saved via SD flags, so that after a reboot the selected option remains
Fixed an input-related bug which would cause weird issues when trying to open hbmenu/album while emuiibo was intercepting a game
Logging (if enabled) now logs to a log file inside the SD card (instead of official LogManager, which is less intuitive for regular users)
Now converted bin-files have a proper mii set (it's not their actual mii since it's still a technical problem to use it, but previously none was set thus showing an invalid/blank mii - now a random one is generated like in other places with nonexistent miis)
1.0.0
This update's major milestone (among others) is to finally intercept nfp:sys service, AKA intercepting system settings/applet amiibo support - hence, many changes here are because of this
emuiibo is no longer a pre-release, by the way ;)
NOTE: don't forget to update to the latest nx-ovlloader/Tesla menu!
The virtual amiibo format went through some major changes system-settings support required:
Now area information is saved in /areas.json, which stores pairs of access_id and program_id values. System settings support also requires knowing the program ID of the title using the area, which is why now area information is saved here
This JSON also contains a current_area_access_id field: system settings's option to delete an amiibo's save data conflicts with emuiibo's implementation of saving (real amiibos have a single game save data while emuiibo allows multiple), so this field contains the currently "selected" area, which consists on the area system settings will see and show info of/delete
In order to convert old formats to this new changes, the areas.json file will be created automatically, but since there is no way for emuiibo to tell the program ID of plain amiibo areas, it will set a certain ID by default (to be distinguishable from the rest, I opted for "Retain Interactive Display Menu"'s one, which is a debug program), and for the correct ID to be set on the area info, the user must use the amiibo with the game in question. I know this can be a bit tedious, but it's the best way to handle it
Now virtual amiibos with names longer than 10 characters are ignored and considered as invalid. Due to certain technical reasons (and Nintendo being too inconsistent with its formats) I originally thought the limit was at 40, but in certain contexts (like system settings) where the 10-char limit is imposed, existing virtual amiibos with longer names tend to cause weird/unexpected behavior
The system settings formatting option will remove all virtual amiibo areas (won't unregister it like with real amiibos since virtual amiibos have no concept of being (un)registered)
The system-settings game-save-deleting option will remove the selected amiibo area, which can be changed from the overlay. This selected area will also be the one system-settings always shows
Now the random-UUID option has its own field in the amiibo.json file (use_random_uuid), so that amiibos will have their own UUID which won't be cleared when random-UUID wants to be enabled (see related overlay changes)
Old formats supported in older emuiibo versions (raw bin dumps and older virtual amiibos) are fully supported now! Backwards-compatibility has been reimplemented so that these outdated formats are automatically converted to the modern format on boot (for bin dumps, the dump binary file gets moved but not deleted)
Criptography is now supported, so that if /switch/key_retail.bin is present, the encrypted sections of bin dumps will be accessible by emuiibo, so that the resulting converted amiibos will contain all the amiibo data present there (this includes game app-data areas, AKA amiibo game save-data)
emuiibo
Compiled with latest libraries
All the format changes above resulted in code changes to support it, of course
The emuiibo IPC service (used by the overlay and other homebrew to control emuiibo) has some new commands reflecting the format changes. As always, the overlay is the best example of a homebrew using this service to control amiibo emulation
Some amiibo ID internal bugs were fixed (again, huge shoutout to Nintendo for being unnecessarily and heavily inconsistent with their amiibo formats across platforms), which would've previously caused some isssues with certain games (like Monster Hunter Rise, Splatoon, etc.)
0.6.4
Fixed some minor issues related to virtual amiibo area saving
Fixed a weird internal issue where sometimes emuiibo would become unaccessible under certain circumstances
0.6.3
Fixed support for latest Atmosphere versions (0.19.x) and for 12.x system updates. Note that this emuiibo version (and next ones) won't work on older Atmosphere versions.
0.6.2
Small nx library corrections/improvements
Atmosphere 0.18.0 support (always use emuiibo with latest ams if it's supported!)
0.6.1
Fixed controller support - some games couldn't be used with detached JoyCons / other controllers on v0.6, that has been fixed on this version.
When exporting system miis on startup, now emuiibo doesn't use the mii's name as the mii folder's name, the mii's name is written to a name.txt file instead to avoid potential FS issues with non-UTF8 names, and the mii folder's name will just be an index.
0.6
emuiibo has been through a complete rewrite in Rust 🦀 (except for the overlay), so everything has changed internally:
Support for latest Atmosphere (0.14.4), and next releases unless breaking changes are introduced
emuiibo no longer handles conversion of raw amiibo dumps or old emuiibo formats - only the current format is supported (the one used since 0.5.x)
Heap size has been considerably reduced (last version used 0x40000, current one only uses 0x4000!) - in addition, the exefs NSP's size has been reduced too, being now 5 times smaller than 0.5.x
Regarding the known issues with time services and sysmodules, emuiibo no longer makes use of this service to avoid creating more issues, even though this implies that virtual amiibos' "last write date" won't be set when a virtual amiibo is modified - luckily, not emulating this anymore doesn't change anything relevant nor break anything
emuiibo's IPC interface other processes may use to communicate with it has a minor change - thus, 0.5.x or older overlays WON'T WORK with this version's emuiibo!
0.5.1
Note: this is nothing more than a quick update in order to support latest CFW - emutool wasn't even updated, the only thing which changed is its version number, and emuiibo has no relevant changes other than small bugfixes.
Updated libnx, libstratosphere/Atmosphere-libs and JSON libraries. emuiibo requires C++20 now, as Atmosphere-libs do so.
Changed size from 0x20000 to 0x40000 to avoid some memory issues people experienced.
Fixed a small bug when dumping console miis to the SD card on startup.
0.5
emuiibo has been completely rewritten, and this has been incredibly helpful, since almost any issue present for previous versions is no longer a problem ;)
Key combos are no longer a thing, since they were a not very friendly way of controlling emuiibo, and having an overlay is 100 times more helpful.
The way emuiibo internally "mimics" Nintendo's amiibo services has been improved a lot. This was what caused many games to not work fine (Link's Awakening, Diablo 3, Fire Emblem...). In fact, emuiibo is introducing a new feature which makes amiibo emulation slightly more similar to real amiibos, which made those specific games work (see below).
Virtual amiibo connecting/disconnecting: these two are the equivalents of placing a real amiibo in the NFC point/R-stick (connecting it) and removing it from that spot (disconnecting it). Previously, emuiibo "tried" to take care of that manually (games like SSBU asked the user to remove the amiibo after saving progress), which resulted in many games freezing when they read amiibos. Now, simply disconnect the amiibo when you need to remove it, and connect it to use it again!
Support for raw bin amiibo dumps works now (it was broken for v0.4)
Old (v0.3.x and v0.4) amiibo formats are converted on startup, so no need to create new amiibos, old ones should work :)
IPC API changed completely, check the overlay's source as an example of how it works.
Now logs are reset on each reboot, so make sure to not reboot or make a copy of emuiibo's log file if wou want to preserve them! (this was done since the log file would get excessively big if it wasn't cleaned)
This is a new addition to the project and, probably, the best and easiest way of controlling emuiibo (thanks to WerWolv for such an amazing project)!
This are its current features:
Toggle on/off emulation
Control virtual amiibo emulation with emuiibo, select a virtual amiibo as active, connect/disconnect it (see above)
Browse through categories, keep your virtual amiibos organized
See in real time if the currently opened game is being intercepted by emuiibo (if you have the overlay open while the game runs, you might be able to spot the exact instant in which emuiibo intercepts the game's amiibo access)
0.4
emuiibo was updated to latest libnx and libstratosphere, what might fix possible bugs those had before. (libstratosphere's new IPC API is far more accurate now)
Internal heap usage was decreased from 0x75000 to 0x5000. (almost 24 times less heap!)
Several implementation mistakes were corrected, which might have caused issues.
Those problems with certain amiibos (mainly BOTW ones) have been fixed, which were caused by a bad handling of amiibo IDs (N sends them in a slightly different way)
Now emuiibo has a settings file: settings.json inside emuiibo's directory. The only setting it has for now is whether input combos are enabled, and this defaults to true.
If you want to disable input combos, just edit the file and change the field comboEnabled from true to false, or the opposite to re-enable them.
Added logging, so that most interactions are logged to a logging file (emuiibo.log) in emuiibo's directory, to help with potential issues.
0.3.1
9.0.0 support
0.3
Emuiibo has been fully rewritten, what involves several changes:
Amiibo moves should be faster now since on previous versions the amiibo dir would be re-scanned (thus iterated over every amiibo) each time user moved to the next amiibo.
Amiibo structure and filesystem layout have changed to a WAY more proper one. (see below)
New amiibo structure - dumps no longer required!
The only relevant part of an amiibo is its unique ID (the rest can be emulated), thus having online databases of this IDs, dumps are useless, but still supported ;)
Amiibos go now inside /emuiibo/amiibo/ for a better directory layout. Don't worry about backwards compatibility. (see below)
Amiibos can be placed inside /emuiibo/amiibo// to be only used in that specific game. Amiibos outside those directories will be used on any game.
Backwards compatibility for any kind of amiibo, considering that 3 types exist: single dumps, 0.2.x format and the new 0.3+ format
Say hello to a new tool to create virtual amiibos easily - emuGUIibo!
Made using Windows Forms, so should be supported by Mono
Accesses a full amiibo list from an online API, so the user just has to select an amiibo and customize it!
Amiibos are generated on the user-specified directory. If a drive with /emuiibo directory is detected, emuGUIibo will assume it's a console's SD card and default (but not force) that path.
(Probably developer only) nfp:emu service changes:
Commands were renamed and reordered, so make sure you update your implementation.
Added new command to get emuiibo version by 3 integers (major.minor.micro)
0.2.1
8.1.0 support, working as always
A new command was introduced in nfp:emu (RescanAmiibos)
0.2
Amiibo progress saving support
Games like SSBU allow saving their progress on amiibos. Now this is supported by redirecting savedata to files inside amiibo's "areas" directory.
This, in fact, provides another advantage, as real amiibos just allow savedata for one title, while this system allows to have multiple saves.
Amiibo system changed
First of all, don't worry. All amiibo BIN files found in emuiibo dir will be auto-converted to the new system.
The new system has every amiibo in a different directory, which contains the amiibo ("amiibo.bin"), a JSON metadata file ("amiibo.json"), an "areas" directory (see above) and a mii char-info copy ("mii.dat").
On this system everything can be customized. In order to change miis you would need the char-info data, which is stored inside the console. To help with this, emuiibo will dump all console miis inside "miis" directory in emuiibo dir, named with the index + mii name (example: "0-XorTroll.dat"). To use it, copy to the amiibo dir and name it as "mii.dat".
An interesting option can be added to the JSON ("randomizeUuid" boolean), which makes emuiibo randomize the amiibo UUID. Having this means special circumstances in certain games, like being recognized as a different amiibo each time in BotW, hence infinite supply.
IMPORTANT! After using 0.2, since the old system gets changed to the new one, 0.1 won't find any amiibos as they're not on the root dir now. Thus, avoid using 0.1 after using 0.2.
HOME button LED blink (7.x+, sadly)
On firmwares on 7.x or higher, performing a combo makes the HOME button blink, which is a simple and nice system to signal that a combo has been performed. Not supported on previous versions for technical limitations.
nfp:emu service changed, with new commands
Also, a remainder that the next Goldleaf version (0.6) is going to have emuiibo support, featuring real amiibo dumping to emuiibo-style and more!